人民网留言数据爬取

背景

起因是要做一个LDA主题分析的实践案例,需要数据来源,人民网的留言数据特别的适合,想着能不能用人民网留言数据来做一个LDA,种种原因还是放弃了,但是第一次弯弯绕绕地通过爬虫拿到了数据,还是想记录一下。

值得说明的是,这篇博客写于2025年11月9日,其中的加密逻辑可能会随着时间而变动。

那么就开始吧

最初的最初,我们都是孩子

以抓取西安市的数据为例,选取一个进行抓取,这里图省事,直接用八爪鱼在最开始的下面的页面进行抓取,这里需要特别注意这个留言ID,因为具体页面的链接就是一串地址和这个留言ID拼接而成的人民网留言数据爬取人民网留言数据爬取
看到那个
tid
了嘛,这里的
tid
就是留言ID
人民网留言数据爬取
嘿嘿,也许你会想,这不就简单了,这看起来又是个静态页面,我们直接请求对应的
xpath
不就完了,但是在我尝试之后,每次都是空列表,事情就变得有趣起来了

让我看看是怎么个事

打开浏览器抓包工具,让我看看是什么歌情况,为啥每次都是空列表
人民网留言数据爬取
看来这个content就是我们想要的数据包,emmm~再看一眼他的请求方法是
post
方法,请求载荷是下面这个样子的
人民网留言数据爬取
也就是说,我们在发起请求的时候,要携带
appCode

param

signature

token
,我观察了一下,打开其他留言
appCode
也是一样的,那么
appCode
就是已知的了;在看
param
这个也是已知的,这就是留言ID;
token
就是个空字符串,这里不知道是啥意思,就先放着吧;接下来这就是
signature
的事情了,fine~这玩意一看就是MD5加密来的,但是是怎么加密的呢?

再深入一点

在源代码里找这玩意是如何进行加密的,搜索
signature
这个字段,于是发现了这个
人民网留言数据爬取
那看来就是这个
i
函数了,网上翻翻,很容易就找到
i
函数,长这个样子
人民网留言数据爬取
打上断点,看看这些东西都是个啥

人民网留言数据爬取
emmm~也就是说
var i = e + JSON.stringify(t) + c
,拼接完成之后检查
a
是否有值,如果有值的话就拼接到
i
后面(但是这里浏览器抓包工具一直提示没有值,就不用管了),然后传给的函数
n()
里面,加下来让我们进去看看
n
函数里面是个啥
人民网留言数据爬取
OK~这么大个MD5,引证了我的想法,就是对传入的这个数据进行MD5加密
也就是说对
var i = e + JSON.stringify(t) + c
进行MD5加密,那么咱们来看看这三个
e

t

c
(看来写这个JavaScript的程序员想起了ETC)都是些啥


e
:固定值
/v1/threads/content

t
:已知值,用户留言ID
{"tid":"20378563"}

c
:一串神秘的固定值
"a2eb17f65d6f4b3f"

拼接之后就是
t = "/v1/threads/content"tid":"240060990"}a2eb1f65d6f4b3f"

我们把
/v1/threads/content"tid":"240060990"}a2eb1f65d6f4b3f
放到菜鸟工具的MD5加密中看一下
人民网留言数据爬取

看看我们之前的
signature
是个啥
人民网留言数据爬取

OK~成功对应上了,接下来就是实现了

原来是这么做的嘛

具体实现的时候据需要遵守一定的原则了,我看了一眼,好像没有找到
robots.txt
文件,那就需要遵守君子协议了,这里我采用了

听从服务器的指令安排,如果服务端返回 429 或者包含 Retry-After,遵循其指示等待后再重试/返回每爬取一次休眠3~7秒,爬取16条数据进行一次模拟终止休眠,终止休眠为88~96秒
具体的源代码在下面的代码仓库中
https://gitee.com/jinzhe-zhang/liuyan_people_data_get

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
none
暂无评论...