如何在python中从Web下载xlsx文件

时间:2019-04-17 07:55:19

标签: python selenium beautifulsoup python-requests

我正在尝试从该网站下载Excel文件。但不幸的是我的代码无法下载excel文件。有一个下载按钮,我以某种方式从python单击了该按钮。请检查我的代码:

 import requests
 from bs4 import BeautifulSoup as BS
 from selenium import webdriver
 from fake_useragent import UserAgent

 headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.96 Safari/537.36'}

 driver = webdriver.Chrome('chromedriver_win32\chromedriver')


 page = 'https://data.world/makeovermonday/2019w16'

 driver.get(page)


 inputElement = driver.find_element_by_id("fileactions.files.download")
 #inputElement.clear()
 #inputElement.send_keys(company)
 inputElement.submit()

3 个答案:

答案 0 :(得分:1)

这里最简单的方法是使用Python SDK

或者,您可以使用steps_per_epoch = round(BATCH_SIZE) // BATCH_SIZE 并通过API调用下载数据集。看一下这些端点:

https://apidocs.data.world/toolkit/api/api-endpoints/datasets/downloaddataset https://apidocs.data.world/toolkit/api/api-endpoints/files/downloadfile

前者的一个例子:

steps_per_epoch = num_train//BATCH_SIZE   # There is no need to use the round() function.

答案 1 :(得分:0)

这对我来说似乎还行:

import requests
from bs4 import BeautifulSoup as BS
from selenium import webdriver
from fake_useragent import UserAgent
import time

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.96 Safari/537.36'}

driver = webdriver.Chrome('C:/chromedriver_win32/chromedriver.exe')

page = 'https://data.world/makeovermonday/2019w16'

driver.get(page)
driver.execute_script("window.scrollTo(0, 400)") 

dropdownElement = driver.find_element_by_id("fileactions.files.download")
dropdownElement.click()

downloadElement = driver.find_element_by_xpath("/html/body/div[3]/div/ul/li/a/div[2]/div")
downloadElement.click()

答案 2 :(得分:0)

  

您希望在单击图标按钮后开始下载,但它只会显示一个带有实际下载按钮的弹出面板。要开始下载,您必须单击该按钮。

首先, submit()仅适用于表单。在给定的页面中,无法提交下载按钮。您必须使用click()

第二,在您单击第一个按钮后,它会显示一个带有下载链接的弹出模式。您必须单击该按钮才能真正开始下载。您必须单击以下元素才能开始下载。

driver.find_element_by_css_selector("div.open > ul > li > a");