Красивый суп вложенный div (добавление дополнительной функции)
Я пытаюсь извлечь название компании, адрес и почтовый индекс из [www.quicktransportsolutions.com][1]
, Я написал следующий код, чтобы отсканировать сайт и вернуть нужную мне информацию.
import requests
from bs4 import BeautifulSoup
def trade_spider(max_pages):
page = 1
while page <= max_pages:
url = 'http://www.quicktransportsolutions.com/carrier/missouri/adrian.php'
source_code = requests.get(url)
plain_text = source_code.text
soup = BeautifulSoup(plain_text)
for link in soup.findAll('div', {'class': 'well well-sm'}):
title = link.string
print(link)
trade_spider(1)
После запуска кода я вижу информацию, которая мне нужна, но я не понимаю, как заставить ее печатать без всей не относящейся к делу информации.
Над
print(link)
Я подумал, что мог бы получить link.string для получения названий компаний, но это не удалось. Какие-либо предложения?
Выход:
div class="well well-sm">
<b>2 OLD BOYS TRUCKING LLC</b><br><a href="/truckingcompany/missouri/2-old-boys-trucking-usdot-2474795.php" itemprop="url" target="_blank" title="Missouri Trucking Company 2 OLD BOYS TRUCKING ADRIAN"><u><span itemprop="name"><b>2 OLD BOYS TRUCKING</b></span></u></a><br> <span itemprop="address" itemscope="" itemtype="http://schema.org/PostalAddress"><a href="http://maps.google.com/maps?q=227+E+2ND,ADRIAN,MO+64720&ie=UTF8&z=8&iwloc=addr" target="_blank"><span itemprop="streetAddress">227 E 2ND</span></a>
<br>
<span itemprop="addressLocality">Adrian</span>, <span itemprop="addressRegion">MO</span> <span itemprop="postalCode">64720</span></br></span><br>
Trucks: 2 Drivers: 2<br>
<abbr class="initialism" title="Unique Number to identify Companies operating commercial vehicles to transport passengers or haul cargo in interstate commerce">USDOT</abbr> 2474795 <br><span class="glyphicon glyphicon-phone"></span><b itemprop="telephone"> 417-955-0651</b>
<br><a href="/inspectionreports/2-old-boys-trucking-usdot-2474795.php" itemprop="url" target="_blank" title="Trucking Company 2 OLD BOYS TRUCKING Inspection Reports">
Каждый,
Спасибо за помощь... Я пытаюсь добавить дополнительную функцию в мой маленький сканер. Я написал следующий код:
def Crawl_State_Page(max_pages):
url = 'http://www.quicktransportsolutions.com/carrier/alabama/trucking-companies.php'
while i <= len(url):
response = requests.get(url)
soup = BeautifulSoup(response.content)
table = soup.find("table", {"class" : "table table-condensed table-striped table-hover table-bordered"})
for link in table.find_all(href=True):
print link['href']
Output:
abbeville.php
adamsville.php
addison.php
adger.php
akron.php
alabaster.php
alberta.php
albertville.php
alexander-city.php
alexandria.php
aliceville.php
alpine.php
... # goes all the way to Z I cut the output short for spacing..
То, что я пытаюсь сделать здесь, это извлечь всю href с помощью city.php и записать его в файл... Но сейчас я застрял в бесконечном цикле, где он продолжает перебирать URL. Любые советы о том, как увеличить его? Моя конечная цель - создать еще одну функцию, которая будет возвращаться в мой trade_spider с помощью www.site.com/state/city.php, а затем перебирать все 50 дат... Что-то вроде эффекта
while i < len(states,cities):
url = "http://www.quicktransportsolutions.com/carrier" + states + cities[i] +"
И тогда это зациклится на моей функции trade_spider, извлекая всю необходимую мне информацию.
Но, прежде чем я доберусь до этой части, мне нужно немного помочь выйти из моего бесконечного цикла. Какие-либо предложения? Или предвидимые проблемы, с которыми я столкнусь?
Я попытался создать сканер, который будет циклически проходить по каждой ссылке на странице, а затем, если он найдет на странице контент, который может сканировать trade_spider, он запишет его в файл... Однако это было немного не в моих силах установить, пока. Итак, я пытаюсь этот метод.
1 ответ
Я бы положился на itemprop
атрибуты различных тегов для каждой компании. Они удобно установлены для name
, url
, address
так далее:
import requests
from bs4 import BeautifulSoup
def trade_spider(max_pages):
page = 1
while page <= max_pages:
url = 'http://www.quicktransportsolutions.com/carrier/missouri/adrian.php'
response = requests.get(url)
soup = BeautifulSoup(response.content)
for company in soup.find_all('div', {'class': 'well well-sm'}):
link = company.find('a', itemprop='url').get('href').strip()
name = company.find('span', itemprop='name').text.strip()
address = company.find('span', itemprop='address').text.strip()
print name, link, address
print "----"
trade_spider(1)
Печать:
2 OLD BOYS TRUCKING /truckingcompany/missouri/2-old-boys-trucking-usdot-2474795.php 227 E 2ND
Adrian, MO 64720
----
HILLTOP SERVICE & EQUIPMENT /truckingcompany/missouri/hilltop-service-equipment-usdot-1047604.php ROUTE 2 BOX 453
Adrian, MO 64720
----