我可以想到两条路:
硒
使用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做了一些不正常的事情,那么您可能需要打开一个控制台,并检查提交时数据的确切发送位置。但如果需要的话,那座桥可以过去。