Почему Python BeautifulSoup возвращает пустой список?

#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. Большое вам спасибо! 🙂