如何使用Selenium从网站下载csv数据

时间:2016-03-28 18:43:58

标签: python selenium selenium-webdriver web-scraping phantomjs

我正在尝试学习如何从通过某些javascript将数据加载到表中的网站获取数据。例如,该网站为here

我使用Selenium从这里获取表中的数据。这是代码

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)

但是,它只获取部分数据,因为在滚动表时动态地将数据加载到表中。如何在处理滚动时从“全部”表中获取数据?

底部还有一个“导出到CSV”数据按钮,我可以用来获取我需要的数据,但是该按钮上的click()事件没有给我csv数据。码。如果可能的话,获得这个csv会更好。

1 个答案:

答案 0 :(得分:2)

我们的目标是获取CSV文件。问题是PhantomJS不能很好地处理文件下载,请参阅Download file via hyperlink in PhantomJS using Selenium(事情可能会发生变化)。

无论如何,让我们抓住CSV文件的链接并使用urlretrieve()下载文件:

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")