Получение данных с сайта BBB с использованием Python и Beautifulsoup - PullRequest
0 голосов
/ 05 октября 2019

Я использую Python и Beautifulsoup, чтобы получить список с сайта BBB.

Мой код работал нормально для визг и желтых страниц, но после этого, когда я начинаю использовать ссылку на сайт BBB, яПолучение ошибки.

from bs4 import BeautifulSoup
import requests
import sys
import csv
## Get the min and max page numbers
pagenum=0

maxpage =0
## loop go thourgh the pages
while pagenum <= maxpage:

    page = 'https://www.bbb.org/search?find_country=USA&find_entity=60980-000&find_id=396_60980-000_alias&find_latlng=40.762801%2C-73.977818&find_loc=New%20York%2C%20NY&find_text=web%20development&find_type=Category&page=2'
    source= requests.get(page).text
    soup= BeautifulSoup(source, 'lxml')
    pagenum = pagenum+10
    for PParentDiv in soup.find_all('div' , class_="fbHYdT MuiPaper-rounded"):
        try:
            PName= PParentDiv.find('a' , class_='Name-sc-1srnbh5-0').get_text()
            print(PName)
        except Exception as e:
            g=''
            print('notworking')

Это часть ошибки.

Traceback (most recent call last):
  File "E:\Python\Python36\lib\site-packages\urllib3\connectionpool.py", line 600, in urlopen
    chunked=chunked)
  File "E:\Python\Python36\lib\site-packages\urllib3\connectionpool.py", line 384, in _make_request
    six.raise_from(e, None)
  File "<string>", line 2, in raise_from
  File "E:\Python\Python36\lib\site-packages\urllib3\connectionpool.py", line 380, in _make_request
    httplib_response = conn.getresponse()
  File "E:\Python\Python36\lib\http\client.py", line 1331, in getresponse

Ответы [ 2 ]

0 голосов
/ 05 октября 2019

Попробуйте, без регулярных выражений:

scr = soup.find_all('script', id="BbbDtmData")
scr2 = soup.find_all('div', class_="Details-sc-1vh1927-0 hHqWfJ")

companies = []
ids = []

for co in range(len(scr2)):
    companies.append(scr2[co].find('a').text)
    companies.append(scr2[co].find('strong').text)

id_dat = scr[0].text
target = id_dat.split('var bbbDtmData = ')
data = json.loads(target[1])
final = data2['search']['results']
for i in final:
    ids.append(i['businessId'])

for co, id in zip(companies, ids):
    print(co,id)

Вывод для связанной страницы:

Template Studios/Jinx Studios 94645
115 East 57th St, New York, NY 10022 144428
Roark Tech Services 120257
 New York, NY 10017-2452 85275

и т. Д.

0 голосов
/ 05 октября 2019

Вы можете легко вывести json из тега script, содержащего эту информацию, и затем проанализировать его с помощью библиотеки json. Преимущество здесь в переменной data, у вас есть все. Я показываю извлечение имени, адреса и телефона из этого.

import requests, re, json

headers = {'User-Agent':'Mozilla/5.0'}
r = requests.get('https://www.bbb.org/search?find_country=USA&find_entity=60980-000&find_id=396_60980-000_alias&find_latlng=40.762801%2C-73.977818&find_loc=New%20York%2C%20NY&find_text=web%20development&find_type=Category&page=2', headers = headers)
p = re.compile(r'PRELOADED_STATE__ = (.*?);')
data = json.loads(p.findall(r.text)[0])
results = [(item['businessName'], ' '.join([item['address'],item['city'], item['state'], item['postalcode']]), item['phone']) for item in data['searchResult']['results']]
print(results)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...