2

Ich versuche zu lernen, wie man Daten von einer Website, die Daten durch einige Javascript in eine Tabelle lädt. Zum Beispiel ist die Website hereSo laden Sie CSV-Daten von einer Website mit Selenium

Ich habe Selen verwendet, um die Daten aus den Tabellen hier zu erhalten. Hier ist der Code:

browser = webdriver.PhantomJS() 
wait = WebDriverWait(browser, 10) 
browser.get(url)  # using the page linked above 

wait.until(EC.presence_of_element_located(
       (By.ID, 'fancybox-outer'))) 

print("Page loaded") 
browser.find_element_by_xpath(
     '//div[contains(@class, "tabs")]/ul/li[text() = "All"]').click() 


data_table = browser.find_element_by_xpath('//div[@class="grid-canvas"]') 

for rows in data_table.find_elements_by_xpath(
      '//div[contains(@class, "slick-row")]'): 
    row = rows.text.split('\n') 
    print(row) 

Es werden jedoch nur die Teildaten abgerufen, da die Daten dynamisch in die Tabelle geladen werden, wenn die Tabelle gescrollt wird. Wie bekomme ich die Daten aus der "Alle" Tabelle, während ich mich um das Scrollen kümmere?

Es gibt auch eine "Export to CSV" -Datenschaltfläche am unteren Rand, die ich verwenden könnte, um die Daten zu erhalten, die ich brauche, aber ein click() Ereignis auf dieser Schaltfläche gibt mir nicht die CSV-Daten im Code . Wenn möglich, wäre es besser, diese CSV zu bekommen.

Antwort

2

Lassen Sie uns versuchen, die CSV-Datei zu bekommen. Das Problem ist, dass PhantomJS nicht gut mit Dateidownloads umgehen kann, siehe Download file via hyperlink in PhantomJS using Selenium (Dinge könnten sich jedoch geändert haben).

Wie auch immer, lassen Sie uns den Link zu der CSV-Datei erhalten und nutzen urlretrieve() die Datei herunterzuladen:

from urllib.parse import urljoin # for Python2: from urlparse import urljoin 
from urllib.request import urlretrieve 

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


url = "https://www.draftkings.com/contest/draftteam/22264509" 
browser = webdriver.PhantomJS() 
wait = WebDriverWait(browser, 10) 
browser.get(url) 

# wait for page to load 
wait.until(EC.presence_of_element_located((By.ID, 'fancybox-outer'))) 
print("Page loaded") 

browser.find_element_by_xpath('//div[contains(@class, "tabs")]/ul/li[text() = "All"]').click() 

# download the file 
csv_url = urljoin(url, browser.find_element_by_css_selector("a.export-to-csv").get_attribute("href")) 
urlretrieve(csv_url, "players.csv") 
Verwandte Themen