β

抓取新榜微信公众号账号

陈鹏个人博客 71 阅读

新榜对微信公众号的统计报表数据还是有一定参考意义的,上榜的公众号的文章质量比较高

http://www.newrank.cn/public/info/list.html?period=month&type=data

新榜PC端站点对报表的数据有一定的加密反爬措施

image

JS肯定能解析出来加密的规则,不过我们只想一次性拿到账号列表,这么个简单需求就没必要去破解加密算法了。

利用中间人思路直接拿到结果更简单。

配置好mitmproxy,写好脚本:

import os
import json
PATH = lambda p: os.path.abspath(os.path.join(os.path.dirname(__file__), p))

def response(flow):
if flow.request.pretty_url.startswith(“http://www.newrank.cn/xdnphb/list/”):
with open(PATH(“newrank.tmp”), “a”) as fout:
obj = json.loads(flow.response.content)[“value”]
for x in obj:
fout.write(“{media_id},{biz}\n”.format(
media_id=x[“account”],
biz=x[“biz_info”]
))
pass

image

启动mitmproxy,加载自定义python处理。

mitmdump –host –insecure -p 1080 -s “newrank.py”

遇到新榜的数据请求,即解析并写入临时文件newrank.tmp。

现在把浏览器的代理切换为mitmproxy的代理地址,即可拿到新榜数据。

请求一共24种,不用挨个点击,来个JS批量模拟点击事件即可。

var els = document.querySelectorAll(‘#day_zixun_links>a, #day_life_links>a’);
for (var i = 0; i < els.length; i++) { els[i].click(); }

image

因为脚本写的简单,可能会有重复的数据,shell简单处理下就可以用了。

[@zw_93_11 /tmp/PDxIwvMc]# cat newrank.tmp | head
rmrbwx,MjM5MjAxNDM4MA==
cctvnewscenter,MTI0MDU3NDYwMQ==
zhanhao668,MzA5OTA0NDIyMQ==
people_rmw,MjM5NzI3NDg4MA==
ckxxwx,MjM5MzA0MTg2MA==
guanchacn,MjM5MjA4MjA4MA==
tiexuejunshi,MjM5NTA0Mjk0MA==
hqsbwx,MjM5MDk1NzQzMQ==
yehang82898289,MjM5OTgxMjA4MA==
fgzadmin,MzA5OTQyMDgyOQ==
[@zw_93_11 /tmp/PDxIwvMc]# cat newrank.tmp | wc -l
14109
[@zw_93_11 /tmp/PDxIwvMc]# sort -u newrank.tmp > tmp.txt
[@zw_93_11 /tmp/PDxIwvMc]# cat tmp.txt | head
a529597,MjM5MDE0NTMzMg==
A91160,MjM5MDAwMjgwMA==
aaaaggm,MzAxOTAyMDc5Mg==
aabb936,MzI5OTA0NjYzOA==
AAzyys,MzA4MDE2NjYxMg==
abcweiketang,MjM5MTc5NDY1OQ==
Abnormal_human,MjM5MzAxODg4MA==
ACFM1039,MjM5NjcwOTY3Nw==
AD4Aworld,MzAwMDY5MTYzNw==
addogking,MzAxNDMwMjQ5Ng==
[@zw_93_11 /tmp/PDxIwvMc]# cat tmp.txt | wc -l
2743

image

原创文章,转载请注明作者及来源。

作者:陈鹏个人博客
原文地址:抓取新榜微信公众号账号, 感谢原作者分享。

发表评论