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

标签 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)

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

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

最佳答案

我们的目标是获取 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")

关于python - 如何使用 Selenium 从网站下载 csv 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36268854/

相关文章:

java - 从 Selenium 2.47.0 迁移到带有 FF 54 的 Selenium 3.13.0 后出现错误

javascript - 使用谷歌浏览器网络驱动程序填充 Jmeter 中的下拉框

java - 如何处理带标题的 iframe

javascript - Protractor Promise fn 不是一个函数

python-3.x - Selenium webdriver python 元素屏幕截图无法正常工作

python - 如果在循环之前 num=10,为什么 "for num in range(5)"会产生任何影响?

python - 有条件地显示和隐藏表单字段并设置字段值

python - 线程类型错误: 'module' object is not callable

python - 即使我确定间距,为什么也会出现这种缩进错误?

java - 我已经导入了 org.openqa.selenium.interactions.Actions 但仍然抛出错误 Actions can not parsed to a variable