我正在尝试学习如何从通过某些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会更好。
答案 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")