Existe uma maneira de obter um Zestimate de “This home” para janeiro de cada ano de 2015-2020 usando Selenium of Beautiful Soup? [duplicado]

Aug 17 2020

No link a seguir, desejo extrair os dados. No entanto, quando estou usando a Beautiful Soup, não consigo localizá-la no html e a Beautiful soup não funciona. Além disso, pensei que talvez pudesse usar selênio para extrair esses dados, mas também não consigo localizar esse conteúdo. Você sabe como eu usaria selênio ou sopa bonita para obter o Zestimate de "This home" para janeiro de cada ano de 2015-2020? Obrigado pela sua ajuda antecipadamente. Estou usando Python.

https://www.zillow.com/homedetails/1954-Sandy-Point-Ln-Mount-Pleasant-SC-29466/10938706_zpid/

Respostas

SwaroopHumane Aug 17 2020 at 15:05

Experimente o código abaixo, ele dará o Zestimate para a casa.

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)

Sobre - "Janeiro de cada ano de 2015-2020?" - Você pode executar o mesmo script manualmente em janeiro para obter um Zestimate mais recente. Você também pode criar um cron job. Mas não tenho certeza de como fazer isso.

PS - Depois de executar este script por cerca de 3-4 vezes, agora estou enfrentando um CAPTCHA. Há uma boa explicação disponível sobre ESTE ligação

DebanjanB Aug 17 2020 at 15:18

Para extrair o Zestimate, ou seja, Zestimate®: $4,232,581você deve induzir WebDriverWait para o element_to_be_clickable()e pode usar uma das seguintes estratégias de localizador :

  • 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 : Você deve adicionar as seguintes importações:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC