Selenium of Beautiful Soup kullanarak 2015-2020 arasında her yıl Ocak ayı için “Bu ev” için bir Zestimate almanın bir yolu var mı? [çiftleme]

Aug 17 2020

Aşağıdaki bağlantıdan verileri kazıyabilmek istiyorum. Ancak, Beautiful Soup'u kullandığımda html'de bulamadım ve Güzel çorba çalışmıyordu. Dahası, bu verileri kazımak için belki selenyum kullanabileceğimi düşündüm, ancak bu içeriği de bulamıyorum. 2015-2020 arasındaki her yılın Ocak ayı için "Bu ev" in Zestimate'ini almak için selenyum veya Beautiful Soup'u nasıl kullanacağımı biliyor musunuz? Yardımınız için şimdiden teşekkür ederiz. Python kullanıyorum.

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

Yanıtlar

SwaroopHumane Aug 17 2020 at 15:05

Aşağıdaki kodu deneyin, ev için Zestimate'ı verecektir.

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 arası her yılın Ocak ayı mı?" - En son Zestimate'ı almak için aynı komut dosyasını Ocak'ta manuel olarak çalıştırabilirsiniz. Ayrıca bir cron işi de oluşturabilirsiniz. Ama bunu nasıl yapacağımdan emin değilim.

Not - Bu betiği yaklaşık 3-4 kez çalıştırdıktan sonra şimdi bir CAPTCHA ile karşı karşıyayım. BU bağlantıda iyi bir açıklama var

DebanjanB Aug 17 2020 at 15:18

Ayıklamak için Zestimate yani Zestimate®: $4,232,581sen ikna etmek zorunda WebDriverWait için element_to_be_clickable()ve aşağıdakilerden birini kullanabilirsiniz Bulucu Stratejileri :

  • Kullanarak 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)
    
  • Not : Aşağıdaki içe aktarmaları eklemeniz gerekir:

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