python脚本不能用了,原因是他们网站做了限流
优采云 发布时间: 2021-02-08 09:00python脚本不能用了,原因是他们网站做了限流
昨天我想去极客时间在我购买的一列中提取数据,结果发现我之前编写的python脚本无法使用。原因是他们网站设置了当前限制,并添加了一些http时间戳。测试。我们可以改进以前的python脚本,使用ip代理池处理当前限制,并找到时间戳验证的规则。
但是这次我们使用了另一个爬虫概念,即,我们直接编写一些js脚本并在另一方的网站中运行它们,以请求相应的接口来获取所需的数据。
事实上,我已经看到了许多这种思维的例子。以前,有一个非常受欢迎的脚本会自动喜欢QQ空间。阅读其源代码后,它实际上非常简单。直接操作dom并触发一些事件。
另一个非常受欢迎的例子,据说是github上一个非常受欢迎的仓库,fuck知乎,是温特从知乎退休后写的,并将他的数据保存在知乎中。
以下是此练习的内容:
获取文章id集合
第一次输入列时,将要求获取左侧的文章列表集。在此界面中,我们可以获取当前列的所有请求。
此专栏文章中可能有超过50篇文章。由于当前的限制,我们将请求分为两部分。
注入FileSaver.js
FileSaver是一个可在浏览器中运行的库,可将数据下载为json或excel文件。
我们在此处创建一个脚本标签,并将此标签插入文档中。
我在这里编写了一个方法downloadJson。我们可以通过发送数据来下载json文件。
创建请求
创建一个ajax请求,请求文章详细信息的接口。
在这里,我们使用本机js进行编写,这是一个发布请求,res是我们获得的该接口的返回值,我们只是从该返回值中取出所需的数据。
以上是单个请求的实现。下图显示了多个请求的实现。
然后我们保存数据:
所有结果都放在rs数组中。
下载数据
我们将所有数据放入一个数组中,并在最后一个请求的末尾,执行我们编写的downloadJson方法来下载它。
导入数据库
将json文件导入数据库。互联网上有很多工具。这次我使用了之前编写的脚本。
此脚本在我的github上用nodejs编写,地址:tomysql.js
最后
这次我们没有使用通用方法来模拟请求或模拟浏览器,而是直接使用浏览器来处理采集数据。当然,必须根据实际情况选择使用哪种方法。
完整脚本:geek.js