文章采集接口( 一个写的python不能不能用了,原因是什么?)
优采云 发布时间: 2022-03-27 21:19文章采集接口(
一个写的python不能不能用了,原因是什么?)
昨天想去Geek Time把我买的一个专栏里的数据拿起来,发现之前写的python脚本不能用了。原因是他们 网站 做了电流限制,并添加了一些对 http 时间戳的验证。. 我们可以改进之前的python脚本,使用ip代理池来处理限流,找到时间戳校验的规则。
但是这次我们使用了另一种爬虫思路,就是直接写一些js脚本,在对方的网站中运行,请求对应的接口获取想要的数据。
事实上,我见过很多这种想法的例子。有一个很流行的脚本自动点赞QQ空间。看了它的源码,其实很简单。就是直接操作dom,然后触发一些事件。
另一个很流行的例子,github上一个很流行的repo,fuck知乎,据说是winter退休时写的知乎,数据保存在知乎中。
以下是本次实践的内容:
获取 文章id 集合
第一次进列的时候会有一个请求获取左边的列表集合文章。在这个界面中,我们可以获取当前列的所有请求。
本栏目有50多篇文章文章,由于限流,我们分成了两个请求。
注入 FileSaver.js
FileSaver 是一个在浏览器中运行并将数据下载为 json 或 excel 文件的库。
这里我们创建一个脚本标签并将这个标签插入到文档中。
我这里写了一个方法downloadJson,我们将这里得到的数据传递过来,我们就可以下载json文件了。
创建请求
创建一个 ajax 请求以请求接口以获取 文章 详细信息。
这里我们使用原生js来写,是一个post请求,res是我们从这个接口得到的返回值,我们可以从这个返回值中取我们需要的数据。
以上是单个请求的实现。多个请求的实现如下图所示。
然后我们保存数据:
所有结果都放在 rs 数组中。
下载数据
我们把所有的数据放到一个数组中,在最后一个请求的最后,执行我们写的downloadJson方法下载下来。
导入数据库
网上有很多工具可以将json文件导入数据库。这次我使用了我之前写的脚本。
这个脚本在我的github上,用nodejs写的,地址:tomysql.js
最后
这一次,我们没有使用常见的做法,模拟一个请求,或者模拟一个浏览器,而是直接使用浏览器来采集data。当然,我们也需要根据实际情况选择使用哪种方法。
完整脚本:geek.js