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

2024-05-23 22:55:13 发布

您现在位置:Python中文网/ 问答频道 /正文

如果给定像http://www.barchart.com/historicaldata.php这样的网站,是否有方法填写文本框,然后单击提交按钮下载数据?

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


Tags: 数据方法文本comhttp网站www页面
1条回答
网友
1楼 · 发布于 2024-05-23 22:55:13

我可以想到两条路:

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

使用Selenium,您可以打开一个程序化的浏览器会话,并执行用户将要执行的所有操作。结合ghost浏览器,这可以在后台以独立于浏览器的方式完成(如果要在没有安装chrome的服务器上运行,这很有用)。 http://elementalselenium.com/tips/46-headless-ghostdriver

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

请求

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

要知道要将数据发送到哪些字段,请查看每个表单字段的页面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',
    ...
}

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

由于付费墙的存在,您必须首先登录并保留会话数据。我把怎么做的解释推迟到this excellent answer

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

相关问题 更多 >