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

时间:2016-06-05 13:26:43

标签: python html urllib algorithmic-trading

如果有一个网站,例如http://www.barchart.com/historicaldata.php,有没有办法填写文本框,然后点击提交按钮下载数据?

我习惯使用urllib下载整个页面,但似乎可以弄清楚如何在文本框中提交文本,然后从我的脚本中单击按钮。

1 个答案:

答案 0 :(得分:4)

我能想到两条道路:

<强>硒

可以使用名为Selenium Webdriver的强大库直接模拟填充数据并单击按钮。 https://seleniumhq.github.io/selenium/docs/api/py/api.html

使用Selenium,您可以打开程序化浏览器会话,并执行用户可以执行的各种操作。与ghost浏览器结合使用,可以在独立于浏览器的方式下在幕后完成(如果要在服务器上运行,则不会安装chrome)。 http://elementalselenium.com/tips/46-headless-ghostdriver

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

<强>请

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

要了解要将数据发送到哪些字段,请查看每个表单字段的页面HTML,然后获取“名称”属性。

如果不是因为您的内容似乎是支付费用,那么您可以轻松完成此操作。例如,假设您的表单有3个要填写的字段,名称属性由'start_date','end_date'和'type'组成。您可以通过以下方式完成此任务:

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',
    ...
}

with open("~~DESIRED FILE LOCATION~~", "wb") as code:
    code.write(r.content)

由于付费专区,您必须先登录,并保留该会话数据。我推迟到this excellent answer

解释如何做到这一点

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