栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

有没有办法使用Python从“网站按钮单击”中下载csv文件?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

有没有办法使用Python从“网站按钮单击”中下载csv文件?

首先,您应该了解基于 request的
HTTP协议。Javascript执行的最终结果将形成HTTP请求,该请求使服务器以文件内容作为响应。您需要“反向”网页,找到如何创建适当的请求并像完成操作一样重复该请求。

  1. 在源代码中,我们看到函数在具有id的HTML元素上执行Submit
    frmDownload
    。因此,返回“检查器”选项卡,然后在搜索框中键入此ID。
  2. 现在我们发现该元素是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-urlenpred"}file = requests.post("https://www.vcsprojectdatabase.org/services/publicViewServices/fetchProjectsExport", data,          headers=headers)with open("res.csv", "wb+") as f:    f.write(file.content)

PS 别忘了向网站所有者寻求许可

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/652843.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号