#html #web-scraping #beautifulsoup #zillow
Вопрос:
Я пытаюсь извлечь расчетную ежемесячную стоимость «1773 доллара» из этого URL-адреса:
https://www.zillow.com/homedetails/4651-Genoa-St-Denver-CO-80249/13274183_zpid/
Просмотрев эту часть страницы, я вижу эти данные:
<div class="sc-qWfCM cdZDcW">
<span class="Text-c11n-8-48-0__sc-aiai24-0 dQezUG">Estimated monthly cost</span>
<span class="Text-c11n-8-48-0__sc-aiai24-0 jLucLe">$1,773</span></div>
Чтобы извлечь 1773 доллара, я попробовал это:
from bs4 import BeautifulSoup
import requests
url = 'https://www.zillow.com/homedetails/4651-Genoa-St-Denver-CO-80249/13274183_zpid/'
headers = {"User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:91.0) Gecko/20100101 Firefox/91.0"}
soup = BeautifulSoup(requests.get(url, headers=headers).content, "html")
print(soup.findAll('span', {'class': 'Text-c11n-8-48-0__sc-aiai24-0 jLucLe'}))
Это возвращает список из трех элементов, без упоминания о 1773 долларах.
[<span class="Text-c11n-8-48-0__sc-aiai24-0 jLucLe">$463,300</span>,
<span class="Text-c11n-8-48-0__sc-aiai24-0 jLucLe">$1,438</span>,
<span class="Text-c11n-8-48-0__sc-aiai24-0 jLucLe">$2,300<!-- -->/mo</span>]
Может кто-нибудь, пожалуйста, объяснить, как вернуть 1773 доллара?
Ответ №1:
Я думаю, вам нужно найти первый родительский элемент. например:
parent_div = soup.find('div', {'class': 'sc-fzqBZW bzsmsC'})
result = parent_div.findAll('span', {'class': 'Text-c11n-8-48-0__sc-aiai24-0 jLucLe'})
Комментарии:
1. Спасибо! Некоторые изменения в вашей первой строке кода возвращают стоимость, но ее значение не составляет 1773 доллара (она выдает 1438 долларов, хотя этого значения нет в общем URL-адресе). «суп.Найти все(‘div’, {‘класс’: ‘sc-qWfCM cdZDcW’})[0].содержимое[1].содержимое[0]». Я обновил свой вопрос воспроизводимым кодом.
2. Спасибо! Я попробовал, но parent_div ничего не возвращает. Кроме того, я обновил вопрос с помощью снимка ежемесячной стоимости «1773 доллара» по URL-адресу, предоставленному для справки.
3. Я попробовал твой код. но я получаю ошибку со страницей робота.
4. у вас есть $kype? в прямом эфире:.cid.626f9a797d9b6ef9
5. Я жду вашего контакта. Я могу тебе помочь.
Ответ №2:
При анализе веб — страницы нам необходимо разделить компоненты страницы по способу их отображения. Существуют компоненты, которые отображаются статически или динамически. Динамический контент также загружается некоторое время, так как страница требует какого-либо внутреннего API.
Я попытался проанализировать вашу страницу с помощью Selenium ChromeDriver
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("https://www.zillow.com/homedetails/4651-Genoa-St-Denver-CO-80249/13274183_zpid/")
time.sleep(3)
time.sleep(3)
el = driver.find_elements_by_xpath("//span[@class='Text-c11n-8-48-0__sc-aiai24-0 jLucLe']")
for e in el:
print(e.text)
time.sleep(3)
driver.quit()
#OUTPUT
$463,300
$1,773
$2,300/mo