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

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 呢 转行不易,需要大家鼓励~

38058 次点击
所在节点    Python
43 条回复
lixuda
2016-09-19 11:27:24 +08:00
@slysly759 感谢,按照你的方法,目前我最大问题是模拟按键。希望楼主能提供下脚本模拟按键。
slysly759
2016-09-19 12:32:38 +08:00
@lixuda 1. 按键精灵提供录制脚本
2.工业级脚本 肯定是需要设置的,不一定适合。
写脚本 JAVA Python 都行 按键精灵的据说是 VBA 效率不高用着用着崩溃了
lixuda
2016-09-19 13:47:06 +08:00
@slysly759 如果是 python ,那意味着要模拟微信客户端的操作,貌似很难吧。我只知道 python 能模拟按键,至于操作一款软件,很难吧
lixuda
2016-09-19 16:24:09 +08:00
@ytmsdy 模拟按键你是如何解决?谢谢哈
pigpi
2016-09-19 22:11:25 +08:00
star+1 请教下 如果采用的脚本点击微信桌面版,那订阅的公众号怎么收集?难道手工一个一个去订阅吗
slysly759
2016-09-19 22:37:20 +08:00
@pigpi 大锅有一个东西叫做一键批量订阅的工具==
原来傻吊微信没有改 key 算法是可以获取所有的
brucedone
2016-09-20 08:52:43 +08:00
欣赏大神的杰作!
slysly759
2016-09-20 10:33:27 +08:00
@brucedone 感谢大神赏光~我会好好努力滴~
pigpi
2016-09-21 11:08:24 +08:00
@slysly759 我试了下 貌似现在修改 formmsgid 和 count 不起作用了。
rearcher
2016-09-22 12:34:02 +08:00
@lixuda 我觉得就是我们获取 key 的方式不一样吧,你是通过 fiddler 存到本地的吧,我是自己写了一个代理服务器,作用和 fiddler 一样,模拟点击的那台 windows 连我的代理服务器,所有的请求都记录到日志,通过正则从日志里提取 key 。至于以上提到的需不需要订阅所有公众号的问题,答案是不需要的,有一个 key 是可以访问所有文章的,我那台模拟点击的 windows 就是写了一个 python 点击脚本,一直重复点击某个公众号里的某几篇文章。
lixuda
2016-09-22 17:33:01 +08:00
@rearcher 谢谢,模拟点击是微信客户端里面的内容吗?还是模拟点击浏览器网址?
rearcher
2016-09-24 10:43:22 +08:00
@lixuda 过程大概是这样, 点击订阅号,出现你订阅的公众号列表,然后随便点一个公众号,然后点击这个公众号的历史文章,然后就会出现文章列表,然后我是从上到下所有文章都点一遍。这样循环。
graetdk
2016-09-27 17:21:49 +08:00
@ytmsdy 有问题想请教,能给个联系方式吗?
ytmsdy
2016-09-27 18:27:29 +08:00
@graetdk amhzaGVuZ3h5QGdtYWlsLmNvbQ==
sundyli
2016-10-26 18:05:57 +08:00
我用 go 实现了一个, 基本原理和楼主的是一样的, 操作简单, 只需要几行代码运行, 手机设置代理, 微信点击历史文章, 不用 fiddle 之类的抓包, 已经实现自动翻页抓取, 防止微信屏蔽, 默认每页抓取休眠 50ms
https://github.com/sundy-li/wechat_spider
slysly759
2016-10-26 23:45:33 +08:00
@sundyli 棒棒哒
cangbaotu
2017-04-19 13:01:31 +08:00
建议使用神箭手提供的专门爬取微信公众号文章的解决方案,还可以自动把爬到的文章进行伪原创同步到自己的网站和数据库,功能很强大: http://www.shenjianshou.cn/index.php?r=market/product&product_id=283
85437898
2017-05-31 08:42:36 +08:00
建议使用微信热文捕手提供的专门爬取微信公众号文章的解决方案,还可以自动把爬到的文章进行伪原创同步到自己的网站和数据库,功能很强大: http://www.wxhand.com.cn
bestehen
2018-07-03 17:33:51 +08:00
如果我想获取每天更新的文章,你能抓取订阅号里面的那些公众号文章吗?
5748hao
2018-11-28 20:23:09 +08:00
谢谢,你的贡献,刚好用上~

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

https://tanronggui.xyz/t/306226

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

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

© 2021 V2EX