有没有办法使用Python从“网站按钮单击”中下载csv文件?
我想自动"Projects.csv"
从此网站下载CSV文件:
https://www.vcsprojectdatabase.org/#/projects/st_/c_/ss_0/so_/di_/np_
可以通过单击CSV图标手动下载CSV,但是我不确定如何在python中自动执行此下载并将CSV文件本地存储在驱动器中。
到目前为止,我已经尝试通过chrome开发者控制台检查按钮元素,以便在“网络”标签中找到正确的网址,例如?
https://www.vcsprojectdatabase.org/services/publicViewServices/fetchProjectsExport
但是我不确定该URL是否应在文件末尾包含这样的文件名:
https://www.vcsprojectdatabase.org/services/publicViewServices/fetchProjectsExport/Projects.csv
这是我尝试过的方法,但是它只写一个空白文件:
import requestsurl = 'https://www.vcsprojectdatabase.org/services/publicViewServices/fetchProjectsExport/Projects.csv'
r = requests.get(url)
with open('a.csv', 'wb') as f:
f.write(r.content)
如何获取CSV文件以正确下载和保存?
回答:
首先,您应该了解基于
HTTP协议。JavaScript执行的最终结果将形成HTTP请求,该请求使服务器以文件内容作为响应。您需要“反向”网页,找到如何创建适当的请求并像完成操作一样重复该请求。
- 在源代码中,我们看到函数在具有id的HTML元素上执行Submit
frmDownload
。因此,返回“检查器”选项卡,然后在搜索框中键入此ID。 - 现在我们发现该元素是HTML表单。此表单将POST请求
https://www.vcsprojectdatabase.org/services/publicViewServices/fetchProjectsExport
连同下一个数据发送到URL :searchTerm=
country=
sectoral_scope=0
recentProjects=
sort=projectId
dir=DESC
formatType=csv
该信息足以尝试在Python中重复此请求。
让我们编写一个小的脚本,该脚本形成并发送相同的请求并将结果保存到.csv文件中:
import requestsdata = {
"searchTerm": "",
"country": "",
"sectoral_scope": "0",
"recentProjects": "",
"sort": "projectId",
"dir": "DESC",
"formatType": "csv"
}
file = requests.post("https://www.vcsprojectdatabase.org/services/publicViewServices/fetchProjectsExport", data)
with open("res.csv", "wb+") as f:
f.write(file.content)
启动它,就可以了。res.csv
包含正确的结果。
通常情况并不是那么容易。为了让我们的请求和浏览器发送的一样,我们应该看一下请求标头。要捕获来自浏览器的HTTP请求,我们可以打开“网络”标签:
现在,让我们按网页上的下载按钮并下载csv文件。现在,在请求表中,我们可以看到我们的发布请求。单击它,然后在“请求标头”部分的“标头”选项卡上进行查看。
有Cookie标头,大多数情况下,例如请求并不重要,可能会被遗漏。但是,如果您对请求有一些问题,则应该查看以前的请求,Set-
Cookie在服务器响应中找到带有标头的请求,然后重复执行。
让我们改进脚本并从浏览器复制重要的标头 (Host,Content-
Length,Connection,因为我们不包括在内,因为Python请求模块会自动添加它们;根本不需要DNT和Upgrade-Insecure-
Requests) 标头。
import requestsdata = {
"searchTerm": "",
"country": "",
"sectoral_scope": "0",
"recentProjects": "",
"sort": "projectId",
"dir": "DESC",
"formatType": "csv"
}
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Language": "en-US,en;q=0.5",
"Accept-Encoding": "gzip, deflate, br",
"Referer": "https://www.vcsprojectdatabase.org/",
"Content-Type": "application/x-www-form-urlencoded"
}
file = requests.post("https://www.vcsprojectdatabase.org/services/publicViewServices/fetchProjectsExport", data,
headers=headers)
with open("res.csv", "wb+") as f:
f.write(file.content)
别忘了向网站所有者寻求许可????
以上是 有没有办法使用Python从“网站按钮单击”中下载csv文件? 的全部内容, 来源链接: utcz.com/qa/399343.html