微信文章爬虫
微信文章爬虫
所谓爬虫者,给人感觉都是些拿来主义的东西,说出去还是有点汗颜。但如果爬的是自己写的东西呢?嗯,也许就理直气壮了。
一直以来,微信一直都禁用历史文章列表。并且在每一代的升级中,都加强防范。对喜好收集数据的人来说,简直是噩梦。我曾找某人帮我人工收集某公众号17-20年间的450多篇文章。整个过程持续近两个月。中途还经常连哄带骗地让人帮我做事情,我简直变得不像我自己。
直到我读到一篇文章:《持续更新,微信公众号文章批量采集系统的构建》(https://zhuanlan.zhihu.com/p/24302048),倒不是因为技术有多高超,而是为作者的愚公精神所折服。
wechat_spider 是笔者在github上找到一款基于 Node.js 的微信爬虫,通过"中间人代理"的原理,批量获取微信文章,包括阅读量、点赞量、评论和文章正文等。
所谓中间人代理,无非是通过抓包工具监听手机发送请求,不断地循环往数据库请求数据。
•使用代理模块 AnyProxy。代码已支持 AnyProxy 4 版本。•支持 Docker 部署。•项目可运行在个人电脑上,也可部署在服务器上。
AnyProxy是阿里开发的一个开放式的HTTP代理服务器。更重要的,它使用node开发。 官方文档 : http://anyproxy.io/cn/ Github主页:https://github.com/alibaba/anyproxy
准备
•安装 Node,版本大于 8.8.1•安装 MongoDB,版本大于 3.4.6•安装 Redis•带微信的手机
部署
本项目可通过docker部署。
git clone https://github.com/lqqyt2423/wechat_spider.git
cd wechat_spider
# build image
docker-compose build
# 运行实例
npm start
设置代理
手机和电脑连到同一个wifi下。设置手机代理为:电脑ip:8101
。
安装证书
部署之后访问http://localhost:8102/
点击rootCA。
作者很贴心地给我们服务器装好了证书,但手机,还是得自己安装。
安装之后
这时候就可以开始搞了,手机访问公众号的文章列表。
——手机屏幕不停闪动。这时抓包已经开始了。
观察控制台变化:
已经在爬取数据。
系统集成了一个可视化界面,这时在访问:http://localhost:8104 :
文章已经存到数据库了。据测试,154篇拉取时间为1个小时。(公众号没人读,逃?♂️)
- Golang语言 之网络
- Golang语言作为服务器,H5作为前端的视频传输
- Pandas——高效的数据处理Python库
- Oracle中的段(r10笔记第81天)
- 转-- Golang中timer定时器实现原理
- Golang语言 -并行程序
- 深度学习中的优化问题以及常用优化算法
- GoldenGate简单复制环境的搭建(r10笔记第79天)
- 在Golang语言中统计程序执行时间
- 经典面试问题: Top K 之 ---- 海量数据找出现次数最多或,不重复的。
- 每天一个Linux命令(2):cd命令
- Golang语言为类型添加方法
- 浅谈 Glide - BitmapPool 的存储时机 & 解答 ViewTarget 在同一View显示不同的图片时,总用同一个 Bitmap 引用的原因
- 100个Numpy练习【2】
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Oracle基本参数(NLS_LANGUAGE)
- Oracle基本参数(NLS_TERRITORY)
- C# 探测器测试系统
- Panuon.UI.Silver使用和介绍
- Oracle基本参数(OPEN_CURSORS)
- Oracle基本参数(PROCESSES)
- C# 中的多态性
- Oracle基本参数(REMOTE_LISTENER)
- C#基于yolov3的行人检测
- yolov3和yolov4检测效果对比
- Oracle基本参数(REMOTE_LOGIN_PASSWORDFILE)
- VS2017中运行MySQL的存储过程
- C#各种定时器Timer类的区别与使用介绍
- json使用实例二
- C# Monitor:锁定资源