我正在尝试学习如何从通过某些 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/