# 用手机爬微信公众号文章

# 引子

刚开始爬公众号时,我的思路是去搜狗微信上爬(https://weixin.sogou.com),用的是https://github.com/Chyroc/WechatSogou。

此方法的优点是代码都在服务器上运行,可批量扩展。但缺点很明显:你至少需要一个稳定的代理,一个一直有新鲜ip的地址池,一个打码平台,当然这些都不重要,重要的是这些都要花银子。

这时你发现身边有个安卓手机,上面落满了灰尘,是一个垂暮之年的手机了。你准备把它拿去二手回收,却发现只值60块钱,你驻足凝思,灵光一闪:何不拿它来做爬虫呢!思路一下就打开了:用手机微信来爬,这就是一个正常的用户操作了,也就没有了封ip,输验证码等这些反爬虫的事情了。

# 选型

首当其冲的一个项目是https://github.com/wonderfulsuccess/weixin_crawler,介绍里是说实现了全自动爬取,但部署起来步骤略多,文档的说明还不是很详尽。如果要商业使用,需对Scrapy、Flask、Echarts比较熟悉。如果你急于体会下手机爬虫的快感,可以先试试这个项目:https://github.com/lqqyt2423/wechat_spider

# 安装

  1. 获取源码
git clone https://github.com/lqqyt2423/wechat_spider.git
  1. 如果本地有docker环境,可以用docker来运行
cd wechat_spider
# build image
docker-compose build
# 运行实例
docker-compose up
# 终止运行
docker-compose down

3.如果想本地运行,则需要安装node和mongodb

node建议安装node8,我用node11测试时发现不稳定,会有异常退出的情况。

以mac为例,安装node步骤如下:

brew install node@8

再安装下mongodb

brew install mongodb

安装wechat_spider

cd wechat_spider
npm install

4.启动wechat_spider 项目的配置文件是config.js,里面的配置项都注释的很清楚了,按需求配下即可启动

cd wechat_spider
npm start

如果是第一次安装使用anyproxy,会自动产生证书,提示如下

> wechat_spider@1.1.1 start /Users/g/wenqian/wechat_spider
> DEBUG=ws:* NODE_ENV=production node index.js

temp certs cleared
rootCA generated
PLEASE TRUST the rootCA.crt in /Users/g/.anyproxy/certificates
The cert is generated at /Users/g/.anyproxy/certificates
(node:55120) DeprecationWarning: current URL string parser is deprecated, and will be removed in a future version. To use the new parser, pass option { useNewUrlParser: true } to MongoClient.connect.
可视化界面: http://localhost:8104
(node:55120) DeprecationWarning: collection.ensureIndex is deprecated. Use createIndexes instead.
[AnyProxy Log][2019-01-03 15:20:59]: Http proxy started on port 8101
[AnyProxy Log][2019-01-03 15:20:59]: web interface started on port 8102
[AnyProxy Log][2019-01-03 15:20:59]: Active rule is: The rule for wechat spider, written by liqiang.
请配置代理: 192.168.5.29:8101

在本机安装下/Users/g/.anyproxy/certificates/rootCA.crt,同时也要将该证书安装到手机上,具体方法参考:http://anyproxy.io/cn/#%E8%AF%81%E4%B9%A6%E9%85%8D%E7%BD%AE,在手机上将代理设置为192.168.5.29:8101。

# 使用

手机配置好后,打开微信(注意,不要用微信7,要用旧版本的微信)浏览一个公众号,点到全部消息,此时如果配置正常,可以在终端上看到爬虫信息:

[AnyProxy Log][2019-01-03 22:14:05]: received request to: GET mp.weixin.qq.com/mp/profile_ext?action=getmsg&__biz=MjM5NzM0MzQ4MQ==&f=json&offset=482&count=10&is_ok=1&scene=126&uin=777&key=777&pass_ticket=iGLzkIAR9gF1rCkKnwJT8FhnyQgOfQAiw4utBG0Y2GJ5ZvojU6qkKB2arycWQ5hw&wxtoken=&appmsg_token=990_oUtRM4fohiXezcFqUa5c6RfEuA01RgEXDl-HSw~~&x5=1&f=json
  ws:Profile msgBiz MjM5NzM0MzQ4MQ== title 光明日报 +5s
  ws:wechatRule 发布时间: 2018-09-20 09:24 +5s
  ws:wechatRule 文章标题: “辱母案”和“反杀案”反思,鼓励正当防卫体现司法关怀| 3分钟速览《光明日报》 +0ms
  ws:wechatRule 发布时间: 2018-09-19 21:52 +0ms
  ws:wechatRule 文章标题: 如果你是火,我愿是炭 | 光明夜读·诗意梦乡 +0ms
  ws:wechatRule 发布时间: 2018-09-19 20:15 +0ms
  ws:wechatRule 文章标题: 百年不倒的“协和”,奥秘究竟在哪里? +0ms
  ws:wechatRule 发布时间: 2018-09-19 17:12 +1ms
  ws:wechatRule 文章标题: 中通快递员强奸客户未遂,偶发事件背后的行业生态 +0ms
  ws:wechatRule 发布时间: 2018-09-19 17:12 +0ms
  ws:wechatRule 文章标题: 【感动】矢志强国强军,甘当红色传人!退役大校徐文涛建全军第一座战区级后勤史馆 +0ms
  ws:wechatRule 发布时间: 2018-09-19 17:12 +0ms
  ws:wechatRule 文章标题: 【关注】今天,博士生孙杨入学!他给同学提供的这项福利太诱人 +0ms
  ws:wechatRule 发布时间: 2018-09-19 17:12 +0ms
  ws:wechatRule 文章标题: 【荐读】“去宁夏,给心灵放个假” +0ms
  ws:wechatRule 发布时间: 2018-09-19 12:13 +0ms
  ws:wechatRule 文章标题: 为什么说潘家园是中国最大的露天博物馆? +0ms

在浏览器访问http://localhost:8104,可以看到爬取的数据。 数据都存在mongodb中,至于如何使用就看自己的需求了。

# 后续问题

  1. 对微信版本有依赖,如果之后微信api又升级或怎样的话,会有影响。
  2. 需手动去点公众号,是否有批量化自动操作的方式?
  3. 爬多了微信号可能会无法正常使用。