아름다운 수프의 셀레늄을 사용하여 2015 년부터 2020 년까지 매년 1 월 "이 집"의 Zestimate를 얻을 수있는 방법이 있습니까? [복제]
다음 링크에서 데이터를 긁어 낼 수 있기를 원합니다. 하지만 뷰티플 스프를 사용하고있을 때 html에서 찾을 수 없어 뷰티플 스프가 작동하지 않습니다. 또한 셀레늄을 사용하여이 데이터를 긁어 낼 수 있다고 생각했지만이 내용도 찾을 수 없습니다. 2015 년부터 2020 년까지 매년 1 월 "이 집"의 Zestimate를 얻기 위해 셀레늄이나 뷰티플 수프를 어떻게 사용하는지 알고 계십니까? 미리 도와 주셔서 감사합니다. 저는 Python을 사용하고 있습니다.
https://www.zillow.com/homedetails/1954-Sandy-Point-Ln-Mount-Pleasant-SC-29466/10938706_zpid/
답변
아래 코드를 시도하면 Zestimate가 가정용으로 제공됩니다.
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)
관련- "2015 년부터 2020 년까지 매년 1 월?" -1 월에 동일한 스크립트를 수동으로 실행하여 최신 Zestimate를 얻을 수 있습니다. 크론 작업을 만들 수도 있습니다. 하지만 어떻게해야할지 모르겠습니다.
추신-이 스크립트를 약 3 ~ 4 회 실행 한 후 이제 보안 문자가 표시됩니다. 이 링크 에 대한 좋은 설명이 있습니다.
추출하기 Zestimate을 즉 Zestimate®: $4,232,581
당신은 유도해야 WebDriverWait을 을 위해 element_to_be_clickable()
당신은 다음 중 하나를 사용할 수 있습니다 로케이터 전략 :
사용
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)
참고 : 다음 가져 오기를 추가해야합니다.
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC