#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 €']]