python - 使用python填写网站文本框,点击按钮下载

标签 python html urllib algorithmic-trading

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

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

最佳答案

我能想到的有两条路:

Selenium

可以使用名为Selenium Webdriver 的强大库直接模拟填充数据和单击按钮。

使用 Selenium,您可以打开一个编程式浏览器 session 并执行用户会执行的各种操作。结合ghost browser ,这可以在幕后以独立于浏览器的方式完成(如果要在服务器上运行且未安装 chrome,则很有用)。

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

请求

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

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

如果不是因为您的内容似乎是付费墙这一事实,您可以很轻松地完成此操作。例如,假设您的表单有 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',
    ...
}

)

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

由于付费专区,您必须先登录并保留该 session 数据。我将如何做到这一点的解释推迟到 this excellent answer

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

关于python - 使用python填写网站文本框,点击按钮下载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37642452/

相关文章:

使用 sympy lambdify 和 scipy 进行 Python 优化

python - Django 自引用模型过滤器ForeignKey

html - 当我使用元标记时,CSS 未加载

python - 尝试安装 mysql-python : "No module named urllib3"

python - For循环调用urllib.urlopen().getcode()很慢

python - 这段 python 代码中的文档字符串有什么用?

python - 如何在更新菜单中的 Plotly 按钮中设置 args 和 args2 的值?

json - 将参数作为 json 对象传递

html - .form-group 具有内部元素的高度

javascript - 查找输入元素,但仅查找具有 onclick 事件的输入元素