Извлечение текста из тега Span с помощью BeautifulSoup

#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