2017-05-11 1 views
5

J'essaye de gratter le contenu du site Web de zillow.Je ne peux pas gratter certains éléments du site Web de zillow

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

Le problème est que je ne peux pas gratter le contenu du prix et de l'histoire de l'impôt. Je pensais que ce sont des éléments javascript qui se chargent quand la page se charge et qui ont donc essayé d'utiliser le sélénium mais je n'arrive toujours pas à les obtenir. Voici ce que j'ai essayé.

code

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> 

Ceci est l'élément le plus extérieur, mais n'a pas d'éléments inside.Also qui donne soup.find_all("table",class_ = "zsg-table yui3-toggle-content-minimized") essayé aucune.

+0

Pouvez-vous poster le code grattoir? –

+0

Le code pertinent est inclus ci-dessus. –

Répondre

3

Vous pouvez essayer d'attendre jusqu'à ce que nécessaire <table> généré et est devenu visible:

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) 

Sortie:

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 

Vous pouvez également analyser sans utiliser BeautifulSoup, par exemple

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

Sortie:

$750,000 

ou

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

Sortie:

$290,000 
+0

Merci Andersson! –

+0

J'essaie d'utiliser la même technique ici [link] (https://www.zillow.com/homedetails/1102-Woodland-Ave-Pittsburgh-PA-15212/11498396_zpid/) mais cela ne semble pas fonctionner. J'ai également essayé d'employer l'identification et l'élément. Voici ce que j'ai essayé 'wait = WebDriverWait (navigateur, 20) table = wait.until (EC.visibility_of_element_located ((By.XPATH, '// section [@ id =" yui_3_18_1_2_1494945298474_1290 "] // table'))) ' –

+0

' id' de 'section' est dynamique (il change chaque fois que vous actualisez la page), vous ne pouvez donc pas l'utiliser dans' XPath'. Essayez '// h2 [text() =" Historique des prix "]/following-sibling :: table' – Andersson