Ошибка атрибута: объект ‘NoneType’ не имеет атрибута ‘text’ — Beautifulsoup

#python #beautifulsoup

#питон #прекрасный суп

Вопрос:

У меня возникла проблема при извлечении текста в промежутке в beautifulsoup:

 data = requests.get("https://www.habitaclia.com/pisos-barcelona.htm?gclid=Cj0KCQiAkuP9BRCkARIsAKGLE8UM9G9s2MhPVtfXl2wo81qT62dqCwkVeV1zVSlPz_G1Nt0QcSoyKTYaAv55EALw_wcB")

soup = BeautifulSoup(data.text, "html5lib")

anuncis = soup.find_all("div", {"class":"list-item-info"})

data = []
for anunci in anuncis:
    preu = [anunci.find("span", attrs={"itemprop": "price"}).text]
    data.append(preu) 
print(data)
 

Я пробовал разные парсеры html, html5, xlml, но, похоже, ни один из них не работает.

Есть какие-нибудь идеи, почему я не могу извлечь текст?

Ответ №1:

Похоже, у некоторых из div.list-item-info них нет span itemprop=price ничего внутри. Итак, вам нужно проверить их следующим образом

 import requests
from bs4 import BeautifulSoup

data=requests.get("https://www.habitaclia.com/pisos-barcelona.htm?gclid=Cj0KCQiAkuP9BRCkARIsAKGLE8UM9G9s2MhPVtfXl2wo81qT62dqCwkVeV1zVSlPz_G1Nt0QcSoyKTYaAv55EALw_wcB")

soup=BeautifulSoup(data.text, "lxml")

anuncis = soup.find_all("div", {"class":"list-item-info"})

data=[]
for anunci in anuncis:
    preu = anunci.find("span", attrs={"itemprop":"price"})
    if preu:
        data.append([preu.text])
print(data)
 

Результат

 [['190.000 €'], ['156.371 €'], ['256.489 €'], ['218.000 €'], ['225.000 €'], ['480.000 €'], ['1.325.000 €'], ['439.000 €'], ['1.495.000 €'], ['339.000 €'], ['780.000 €'], ['549.000 €'], ['549.000 €'], ['535.000 €'], ['460.000 €']]