¿Hay alguna manera de obtener un Zestimate de “Esta casa” para enero de cada año desde 2015-2020 usando Selenium of Beautiful Soup? [duplicar]
Desde el siguiente enlace quiero poder raspar los datos. Sin embargo, cuando estoy usando Beautiful Soup no pude ubicarlo en el html y Beautiful soup no funcionaba. Además, pensé que tal vez podría usar selenio para extraer estos datos, pero tampoco puedo ubicar este contenido. ¿Sabes cómo usaría selenio o Beautiful Soup para obtener el Zestimate de "Esta casa" para enero de cada año desde 2015-2020? Gracias por su ayuda de antemano. Estoy usando Python.
https://www.zillow.com/homedetails/1954-Sandy-Point-Ln-Mount-Pleasant-SC-29466/10938706_zpid/

Respuestas
Pruebe el siguiente código, le dará el Zestimate para el hogar.
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
import time
options = Options()
user_agent = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.50 Safari/537.36'
options.add_argument('user-agent={0}'.format(user_agent))
driver = webdriver.Chrome(options=options)
wait = WebDriverWait(driver, 20)
action = ActionChains(driver)
driver.get("https://www.zillow.com/homedetails/1954-Sandy-Point-Ln-Mount-Pleasant-SC-29466/10938706_zpid/")
Home_Value = wait.until(EC.presence_of_element_located((By.XPATH, "//a[text()='Home value']")))
action.move_to_element(Home_Value).click().perform()
Zestimate = driver.find_element_by_xpath('//*[@id="ds-home-values"]/div/div[1]/div/div[1]/div/div/p').text
print(Zestimate)
Respecto a - "¿Enero de cada año desde 2015-2020?" - Puede ejecutar el mismo script manualmente en enero para obtener un Zestimate más reciente. También puede crear un trabajo cron. Pero no estoy seguro de cómo hacerlo.
PD: después de ejecutar este script durante aproximadamente 3-4 veces, ahora me enfrento a un CAPTCHA. Hay una buena explicación disponible en ESTE enlace
Para extraer el Zestimate es decir, Zestimate®: $4,232,581
que tiene que inducir WebDriverWait para el element_to_be_clickable()
y se puede utilizar cualquiera de las siguientes estrategias de localización :
Usando
XPATH
:driver.get('https://www.zillow.com/homedetails/1954-Sandy-Point-Ln-Mount-Pleasant-SC-29466/10938706_zpid/') print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//span[contains(., 'For sale')]//following::span[contains(@class, 'ds-dashed-underline') and contains(., 'Zestimate')]//ancestor::span[2]"))).text)
Nota : debe agregar las siguientes importaciones:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC