2017-05-11 46 views
5

Próbuję zeskrobać zawartość strony zillow.Nie mogę zeskrobać niektórych elementów z witryny zillow

Ex https://www.zillow.com/homedetails/689-Luis-Munoz-Marin-Blvd-APT-508-Jersey-City-NJ-07310/108625724_zpid/

Problemem jest to, że nie można zeskrobać zawartość cenie i historii podatkowej. Myślałem, że to elementy javascript ładują się, gdy strona ładuje się i dlatego próbowałem używać selenu, ale nadal nie mogę ich pobrać. Oto co próbowałem.

Kod

phistory = soup.find("div",{"id": "hdp-price-history"}) 
print phistory 

Html

<div class="loading yui3-widget yui3-async-block yui3-complaintstable yui3-hdppricehistory yui3-hdppricehistory-content" id="hdp-price-history"> 
    div class="zsg-content-section zsg-loading-spinner_lg"></div> 
</div> 

Jest to element najbardziej oddalonych, ale nie ma żadnych elementów inside.Also próbowali soup.find_all("table",class_ = "zsg-table yui3-toggle-content-minimized") który daje żadnego.

+0

można pisać kod skrobak? –

+0

Odpowiedni kod znajduje się powyżej. –

Odpowiedz

3

Można spróbować poczekać aż wymagane <table> wygenerowany i stał się widoczny:

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

driver.get("https://www.zillow.com/homedetails/689-Luis-Munoz-Marin-Blvd-APT-508-Jersey-City-NJ-07310/108625724_zpid/") 
table = wait(driver, 10).until(EC.visibility_of_element_located((By.XPATH, '//div[@id="hdp-price-history"]//table'))) 
print(table.text) 

wyjściowa:

DATE EVENT PRICE $/SQFT SOURCE 
05/03/17 Listed for sale $750,000+159% $534 KELLER WILLIAM... 
06/15/11 Sold $290,000-38.3% $206 Public Record 
10/14/05 Sold $470,000 $334 Public Record 

Można także analizować je bez użycia BeautifulSoup, np

print(table.find_element_by_xpath('.//td[text()="Listed for sale"]/following::span').text) 

wyjściowa:

$750,000 

lub

print(table.find_element_by_xpath('.//td[text()="Sold"]/following::span').text) 

wyjściowa:

$290,000 
+0

Dziękuję Andersson! –

+0

Próbuję użyć tej samej techniki tutaj [link] (https://www.zillow.com/homedetails/1102-Woodland-Ave-Pittsburgh-PA-15212/11498396_zpid/), ale nie wydaje się działać. Próbowałem też użyć id i elementu. Oto, co próbowałem: 'wait = WebDriverWait (browser, 20) table = wait.until (EC.visibility_of_element_located ((By.XPATH, '// section [@ id =" yui_3_18_1_2_1494945298474_1290 "] // table'))) ' –

+0

' id' z 'section' jest dynamiczne (zmienia się przy każdym odświeżeniu strony), więc nie można go używać w' XPath'. Spróbuj '// h2 [text() =" Historia cen "]/follow-sibling :: table' – Andersson