#python #beautifulsoup
#python #beautifulsoup
Вопрос:
Я новичок в ИТ, я пытался помочь своему другу с его работой, и я хотел создать список клиентов, которых он мог бы обслуживать (возможно, экспортировать его в файл тоже было бы здорово, но я подумаю об этом позже, я думаю).
Когда я пытаюсь запустить код, он просто возвращает пустой список, у вас есть какие-либо предложения?
любые предложения / отзывы будут высоко оценены!
Спасибо! (Я знаю, возможно, это не лучший код, который вы когда-либо видели! поэтому я заранее приношу свои извинения!)
import requests
from bs4 import BeautifulSoup
import pprint
res = requests.get('https://www.paginebianche.it/toscana/li/gommisti.html')
res2 = requests.get('https://www.paginebianche.it/ricerca?qs=gommistiamp;dv=liamp;p=2')
soup = BeautifulSoup(res.text, 'html.parser')
soup2 = BeautifulSoup(res2.text, 'html.parser')
links = soup.select('.org fn')
subtext = soup.select('.address')
links2 = soup2.select('.org fn')
subtext2 = soup2.select('.address')
mega_links = links links2
mega_subtext = subtext subtext2
def create_custom_hn(mega_links,mega_subtext):
hn = []
for links,address in enumerate(mega_links):
title = links.getText()
address= address.getText()
hn.append({'title': title, 'address': address})
return hn
pprint.pprint(create_custom_hn(mega_links,mega_subtext))
Комментарии:
1. Возможно, попробуйте вместо этого селектор
.org.fn
? Обратите внимание на точку (.) передfn
Ответ №1:
Селектор .org fn
неправильный, должен быть .org.fn
, чтобы выбрать все элементы с классом org
и fn
.
Однако некоторые элементы отсутствуют .address
поэтому ваш код выдает искаженные результаты. Вы можете использовать этот пример, чтобы получить заголовок и адреса (в случае отсутствия адреса используется -
):
import pprint
import requests
from itertools import chain
from bs4 import BeautifulSoup
res = requests.get('https://www.paginebianche.it/toscana/li/gommisti.html')
res2 = requests.get('https://www.paginebianche.it/ricerca?qs=gommistiamp;dv=liamp;p=2')
soup = BeautifulSoup(res.text, 'html.parser')
soup2 = BeautifulSoup(res2.text, 'html.parser')
hn = []
for i in chain.from_iterable([soup.select('.item'), soup2.select('.item')]):
title = i.h2.getText(strip=True)
addr = i.select_one('[itemprop="address"]')
addr = addr.getText(strip=True, separator='n') if addr else '-'
hn.append({'title': title, 'address': addr})
pprint.pprint(hn)
С принтами:
[{'address': 'Via Don Giovanni Minzoni 44n-n57025nPiombino (LI)',
'title': 'CENTROGOMMA'},
{'address': 'Via Quaglierini 14n-n57123nLivorno (LI)',
'title': 'F.LLI CAPALDI'},
{'address': 'Via Ugione 9n-n57121nLivorno (LI)',
'title': 'PNEUMATICI INTERGOMMA GOMMISTA'},
{'address': "Viale Carducci Giosue' 88/90n-n57124nLivorno (LI)",
'title': 'ITALMOTORS'},
{'address': 'Piazza Chiesa 53n-n57124nLivorno (LI)',
'title': 'Lo Coco Pneumatici'},
{'address': '-', 'title': 'PIERO GOMME'},
{'address': 'Via Pisana Livornese Nord 95n-n57014nVicarello (LI)',
'title': 'GOMMISTA TRAVAGLINI PNEUMATICI'},
{'address': 'Via Cimarosa 165n-n57124nLivorno (LI)',
'title': 'GOMMISTI CIONI AUTORICAMBI amp; SERVIZI'},
{'address': 'Loc. La Cerretella, 219n-n57022nCastagneto Carducci (LI)',
'title': 'AURELIA GOMME'},
{'address': 'Strada Provinciale Vecchia Aurelia 243n'
'-n'
'57022n'
'Castagneto Carducci (LI)',
'title': 'AURELIA GOMME DI GIANNELLI SIMONE'},
...and so on.
Комментарии:
1. Большое вам спасибо! 🙂