-5

J'essaie de gratter http://washingtonmonthly.com/college_guide?ranking=2016-rankings-national-universities site web.comment gratter une page web qui n'est pas écrite directement en HTML, mais qui est générée automatiquement en utilisant JavaScript?

Ce site web est généré automatiquement en utilisant JavaScript pour mettre à jour l'arbre DOM.J'ai essayé ci-dessous le code Selenium pour obtenir les éléments à l'intérieur de la table, mais il renvoie une liste vide.

from selenium import webdriver 
import time 


driver = webdriver.Chrome(executable_path="C:\\chrme\\chromedriver") 
driver.get('http://washingtonmonthly.com/college_guide?ranking=best-colleges-for-adult-learners-4-year-colleges') 
time.sleep(5) 
test = driver.execute_script("return document.getElementsByClassName('tablesaw tablesaw-swipe')") 
print(test) 

Existe-t-il un moyen d'exécuter ces scripts et d'obtenir le code HTML? J'utilise Python 3.6

+0

Je veux cette table au format CSV. Cette table a la classe 'tablesaw-swaw'. Mais ce HTML sera peuplé une fois que Javascript sera exécuté. –

+1

Voir: [Comment faire X?] (Https://meta.stackoverflow.com/questions/253069/whats-the-appropriate-new-current-close-reason-for-how-do-i-do- x) L'attente en SO est que l'utilisateur posant une question fait non seulement de la recherche pour répondre à sa propre question mais partage aussi cette recherche, tentatives de code, et résultats. Cela démontre que vous avez pris le temps d'essayer de vous aider, cela nous évite de répéter des réponses évidentes, et surtout, cela vous aide à obtenir une réponse plus spécifique et pertinente! Voir aussi: [ask] – JeffC

+0

Vous devez lire quelques tutoriels de base, apprendre à localiser correctement et attendre. Une fois que vous faites cela et essayez d'autres approches, revenez et éditez la question et ajoutez ces tentatives et les résultats. – JeffC

Répondre

0

Exécutez ce script et je suppose qu'il vous donnera tout ce que la table contient, y compris une sortie csv.

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

driver = webdriver.Chrome() 
wait = WebDriverWait(driver, 10) 
outfile = open('table_data.csv','w',newline='') 
writer = csv.writer(outfile) 
driver.get("http://washingtonmonthly.com/college_guide?ranking=2016-rankings-national-universities") 

wait.until(EC.frame_to_be_available_and_switch_to_it("iFrameResizer0")) 
wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, 'table.tablesaw'))) 

tab_data = driver.find_element_by_css_selector('table.tablesaw') 
list_rows = [[cell.text for cell in row.find_elements_by_css_selector('td')] 
      for row in tab_data.find_elements_by_css_selector('tr')] 
for data in list_rows: 
    writer.writerow(data) 
    print(data) 

driver.quit() 

Btw, je suppose que vous avez installé la bibliothèque lxml.

+0

Merci Il a travaillé .. –

+0

Si cela fonctionne, assurez-vous d'accepter la réponse. Merci. – SIM

-1

Tout d'abord, lorsque j'entre le lien, il est dit que la page n'existe pas. Ensuite, si vous voulez obtenir une page générée automatiquement, vous devez utiliser les outils de développement chrome et voir quelle requête exécute le code. Donc, si vous voyez une requête GET qui retourne le code html généré, vous devez prendre cette requête et l'utiliser dans votre code. Faites-moi savoir si cela vous a aidé.

+0

http://washingtonmonthly.com/college_guide?ranking=2016-rankings-national-universities –