分享爬取微信公众号的一点心得

2016-09-14 15:50:51 +08:00
 slysly759

自己探索出来一套爬取微信公众号的方法,发布出来就想看看这个微信反爬虫部门什么时候封。

先上一张图片:

关于这个探索出来的方法有几点我想写在前面

1.为什么公布出来

因为原来外包需求取消不涉及商业利益

2.公布出来有什么好处么

有,通过接受大家批评,来获得提高,认识一些有意思的人。

3.发布出来这个能有效多长时间呢?

不清楚,但是目前用的是一个笨方法。我觉得封的概率不太大。具体下面说明

思路: 在 key 不和公众号绑定前,用的方法是每隔半个小时获取一个微信有效 key 然后批量获取微信文章页。

问:如何获取 key 。

思路:利用 fiddler 截获微信请求报文获取有效 key

问:截取的 key 如何导入到本地或者实现上传到 FTP 方便我后续程序处理

答:我修改了 fiddler 的 custom rules 让他可以遇到微信请求公众号的请求保留其 request 和 response 分别保存到 C 盘 text 文件具体可以参考我的博客(这个我真的不是广告,只是分享,不想了解就别点开了) 利用 fiddler 截获微信传输数据 (方便抓取公众号信息) 批量抓取微信公众号文章

问:现在一个 key 只能获取一个公众号,我该如何办?

答:目前我觉得你模拟点击电脑版的微信,截取其内容就好了。如果你要跟新 2000 个公众号,那么历史文章你只需要一个 key 在半小时内获取完一个公众号的所有文章(这个不难 几分钟就好了) 以后只需要每天模拟点开是否有新文章 如果有就加入 MySQL 。

问:我看了你的文章,要获取历史文章列表,除了很傻比的模拟点击以外,你有提供任何解决方案么?

答:有的,历史文章页通过 frommsgid 一个参数和 count 控制,修改他们就可以凭借你的 key 来获取任何时间的文章 list

问:现在抓取微信公众号不是还有搜狗,他们还不需要关注公众号

答:抓取傻逼搜狗并不能满足我一开始客户的需求,他要求至少 30 天,并且每天跟新。搜狗只能是最近 10 篇。

问:我明白了,你现在的解决方案是通过模拟用户操作微信然后截取数据进行入库对么 这样看起来效率不高啊

答:的确,但是本方法往往很难被封。其次你也可以手动获取 key 然后去批量获取历史文章啊,没有人拦着你啊 或者你发现那个 key 与公众号 ID 的加密算法被你解出来你完全可以直接用 key 啊 或者你社工好,拿到一个万能 key ,没有人拦着你去用更快更高效的方法呢。

问:我看到你 github 写的代码很烂,而且还有一个 prepare_request 的东西,那个是什么?

答:恩新手才学不就,以前并没有 Java 或者 c++功底。至于那个 prepare_request python 文件是原来 key 没有雨公众号关联的时候写的一个小脚本,之所以关联是因为我手残发帖到 V2EX 上来问大家 key 算法被微信反爬虫的小伙伴发现了就给我封掉了。。。。。所以就换了一个写

问:我看到你目录下依旧有 fiddler 的生成文件了,为什么你的程序还要再处理一遍

答:因为 fiddler 生成的是数据流文本,在每个字母之间有十六进制的 00 存在我的程序将其处理了,这个不到二十行的代码花了我一下午来折腾,说来惭愧。

问:基本上你说的我了解,但是没有代码你说个 xx

答:github 地址 如果各位大爷看我码字分享很辛苦 可否给小的一个 star 呢 转行不易,需要大家鼓励~

37545 次点击
所在节点    Python
43 条回复
IJustmaogepao
2016-09-14 16:13:43 +08:00
先 mark ,已 star ,等有空看看
slysly759
2016-09-14 16:14:46 +08:00
ytmsdy
2016-09-14 16:16:53 +08:00
哈哈哈哈,我也整了一个。 www.wdiandi.com
目前我比较头疼的问题是数据量的上升不是一般的快啊,目前我的数据库已经上升到了 56G 。而且这还是文章内容进过 base64 ,转码,然后压缩过的。
生怕那一天数据库挂了,然后就思密达了。
slysly759
2016-09-14 16:20:40 +08:00
@ytmsdy 哈哈~用的也是通过 key 获取的喵
要不自己买一个小服务器呢 我好像没有打开你的网站
ytmsdy
2016-09-14 16:24:00 +08:00
@slysly759 现在服务器正在抓数据, mysql 数据库有点缓不过来。没有做读写分离的就是这么的悲剧!
ljcarsenal
2016-09-14 16:29:54 +08:00
@ytmsdy 你做这网站有啥收益么。。。感觉这类网站目前太多了
slysly759
2016-09-14 16:30:28 +08:00
@ytmsdy 额你居然不做读写分离好吧 你赢了。。。。
ytmsdy
2016-09-14 16:31:55 +08:00
@ljcarsenal 目前来看木有啥收益,访问量低的不行。坚持两年,如果不行就要关了。
zijikai
2016-09-14 16:31:57 +08:00
从哪里转的行?
ytmsdy
2016-09-14 16:37:12 +08:00
@slysly759 服务器资源有限,目前我网站的数据量大概是 650w 篇文章。目前数据库是 56G ,如果做读写分离,一个主库,一个从库。加起来就是差不多 120G !小服务器。。硬盘总共才 500G,还有其他的应用跑在上面。最多给 100G 的空间给这个网站,木有办法。
slysly759
2016-09-14 16:41:28 +08:00
@zijikai 目前学生,国际经贸专业,虽然我喜欢我的专业也喜欢这里的老师,不过我更喜欢 IT 所以希望能够转过来。目前在凯捷实习。
1987618girl
2016-09-14 18:21:56 +08:00
小伙子有潜力啊,就是代码不够简洁,不过不错了,加油
slysly759
2016-09-14 18:47:46 +08:00
@1987618girl 感谢,我会好好努力的| ू•ૅω•́)ᵎᵎᵎ
verydxz
2016-09-15 04:21:52 +08:00
strategically mark
mingyun
2016-09-15 09:28:03 +08:00
star+1
GreatMartial
2016-09-16 16:39:37 +08:00
关注一下,已 star 。
rearcher
2016-09-16 23:45:34 +08:00
之前实验室也是做了这样一个微信数据分析平台,我们是跑一台 windows 用脚本不断点击微信客户端文章,然后这个 windows 连到自己写的代理服务器,记录 request ,存日志,程序通过正则表达式提取 key 。
lixuda
2016-09-19 10:39:00 +08:00
Fiddler 获得的链接 批量是靠按键精灵去点击吗?
slysly759
2016-09-19 10:42:52 +08:00
@lixuda 可以按键精灵 可以自己写脚本 可以获取 key 然后拼接获得 key 获取公众号所有历史文章 自己选择 最后一项我会跟新的
lixuda
2016-09-19 11:16:21 +08:00
@rearcher 能否提供下思路?模拟点击,谢谢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/306226

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX