==请帮忙点点赞,点个关注,谢谢!!==
====解密代码在最底部====
官网地址:领导留言板-人民网
通过接口爬取,可以解决selenium只能采集到前20页(也就是200条)的问题。
接口虽然不能突破页数限制,但是有其他方式可以获取全部数据。(具体看文章底部代码注释)
按此方式日更只需要请求一次即可全部获取,不需要再繁琐的分类采日更了。
具体是下图的这个参数
一、加密参数分析
1.参数定位
上来就一个冒号大法,很明显和接口中的四个参数都对上了。
直接给他一个断点
2.看看都传了些什么参数给i()方法
多选几个搜索条件请求分析,发现只有t值是在改变的。那其他参数写死就行。结合其他接口看返回的数据分析t值存放的就是地域、领域等这些搜索条件的分类标签(代码注释中有详细解释)。
那么4个参数是什么就搞明白了,那还等什么直接进i()方法看他是个什么东西。
3.i()方法分析
进来后发现就在我们头上
一步一步走,发现在i()方法中写了一个i,这个i值是e、JSON.stringify(t)、c拼接在一起的
(备注:此时i()方法中的 e=最初e,t=最初t,c=最初l,a=最初h)
再往下走,把i这个变量传到了n ()方法中,别等了,直接进去。
4.n()方法分析
n()方法跳转到了这里,继续往里进。
明晃晃的md5,那等什么,直接把传进来的i给md5一下,看看加密后的值一不一样。
ok完成,写代码吧,这加密很简单,直接纯算。
二、加密纯算代码
====解密不易,在文章底部给点个赞+关注吧!有米的大哥给赏点,感谢!!====
import json
from hashlib import md5
urlPath = "/v2/threads/search" # 可以在方法中写死
# param样例
param = {
"position": 0, # 0为地方留言, 1为部委留言
"keywords": "", # 关键词
"fid": 4, # 地域
"domainId": None, # 领域, 部委留言没有这个参数
"typeId": None, # 类别, 部委留言没有这个参数
"timeRange": None,
"ansChecked": False,
"stTime": None,
"sortType": "0", # sortType: 默认、升序、降序
"page": 1, # 页数,最大20
"rows": 10 # 返回多少条数据,没有上限。最好每页别超1000
# 每页返回数据量可以调大点(最大尝试过3000,但可能对服务器负载会有点大,不建议调太高)
# 因为页数限制大量采集在调高返回数据量的基础上还是建议 按 地域、领域、类别 分类采。
}
# 采用四个字段appCode、token、param、urlPath按一定规则处理拼接后采用md5生成signature
def encode(urlPath, param):
param = str(json.dumps(param, ensure_ascii=False))
appCode = "PC42ce3bfa4980a9" # 固定写死
appCode_md5 = md5(appCode.encode('utf8')).hexdigest()[:16] # 因为appCode是固定的,所以这个参数就是固定的,但再往里分析会发现,他也是md5加密只不过只取了前16位
token = "" # 固定写死
signature = md5((urlPath + param + appCode_md5 + token).encode('utf8')).hexdigest()
return signature
====需要22年至今的数据和完整爬虫源代码的私我====
免责声明
本文所提供的信息仅供个人学习和研究之用,不得用于任何商业目的或非法活动。不保证所提供的下载方法或工具完全有效或安全,也不对任何因使用本文内容而导致的损失或损害承担责任。在使用本文提供的方法或工具时,请自行承担风险,并确保您的行为符合相关法律法规的规定。
转载时请注明原文作者和原文链接