Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python在网站上填写文本框,然后单击按钮下载_Python_Html_Urllib_Algorithmic Trading - Fatal编程技术网

使用python在网站上填写文本框,然后单击按钮下载

使用python在网站上填写文本框,然后单击按钮下载,python,html,urllib,algorithmic-trading,Python,Html,Urllib,Algorithmic Trading,如果给定一个网站,例如,是否有方法填写文本框,然后单击提交按钮下载数据 我习惯于使用urllib下载整个页面,但我似乎知道如何将文本提交到文本框中,然后从脚本中单击按钮。我可以想到两种途径: 硒 使用一个名为 使用Selenium,您可以打开一个程序化的浏览器会话,并执行用户将执行的所有操作。与之相结合,这可以在后台以独立于浏览器的方式完成(如果这将在服务器上运行,而服务器上没有安装chrome,则非常有用) 虽然一个很棒的库(非常适合测试网页)Selenium需要学习很多东西。如果您特别希望执

如果给定一个网站,例如,是否有方法填写文本框,然后单击提交按钮下载数据


我习惯于使用
urllib
下载整个页面,但我似乎知道如何将文本提交到文本框中,然后从脚本中单击按钮。

我可以想到两种途径:

使用一个名为

使用Selenium,您可以打开一个程序化的浏览器会话,并执行用户将执行的所有操作。与之相结合,这可以在后台以独立于浏览器的方式完成(如果这将在服务器上运行,而服务器上没有安装chrome,则非常有用)

虽然一个很棒的库(非常适合测试网页)Selenium需要学习很多东西。如果您特别希望执行填写和单击的操作,则需要该选项。但我认为可能有一种更简单的方法来完成您试图使用Python请求所做的事情

请求

Python的请求库是另一个用于从页面请求数据的库。您可以使用它提交GET请求(浏览器在仅访问页面时将执行的操作)或POST请求(在单击“提交”后,浏览器将其表单数据发送到)

要知道要将数据发送到哪些字段,请查看每个表单字段的页面HTML,并获取“name”属性

如果不是因为你的内容似乎是收费的,你可以很容易地做到这一点。例如,假设您的表单有3个字段要填写,名称属性由“开始日期”、“结束日期”和“类型”组成。您可以通过以下方式完成此任务:

import requests

url = "http://www.barchart.com/historicaldata.php/"
r = requests.post(url, data = {
    'item1': 'one of the form fields',
    'color': 'green',
    'location': 'Boston, MA',
    ...
}
)

由于付费墙,您必须首先登录,并保留会话数据。我推迟向你解释怎么做

编辑:
关于您应该将数据提交到哪里,可能还有一件事需要注意。您应该在哪里提交帖子数据的url可能与您提供的条形图url相同,但也可能不同。要找到答案,请查看HTML表单对象本身的“action”属性。10次中有9次,这就是提交数据的地方。如果该站点使用Javascript做了一些不可靠的事情,您可能需要打开控制台,检查提交时数据的确切发送位置。但是如果需要的话,那座桥是可以跨越的。

这似乎不符合我的需要。请参见下面的示例代码。文本框的名称为“sym”,按钮的名称为“提交”。当我遵循您的示例时,我似乎得到了页面的完整html代码,而不是按钮应该下载的实际csvurl=''r=requests.post(url,data={'sym':'HWM16','submit':'submit'})打印r.content``附带说明:您也可以使用您的google帐户免费登录此网站。
with open("~~DESIRED FILE LOCATION~~", "wb") as code:
    code.write(r.content)