公司有一个微信公众号,每天都会推送同事原创的文章,技术类、文学类、生活类什么都有。虽然微信本身提供了报表功能,但是不满足我们自己的运营需求,需要手工统计下每月的数据,后来我帮忙写了脚本抓取数据
目标:
- 登录微信公众号
- 获取图文分析数据
- 获取用户分析数据
相关工具
- Fiddler+chrome network 请求生成
- chrome postman 编辑器
- pycharm
通过抓包工具可以分析出步骤如下
- 初始化登录页面
- 提交用户名密码
- 获取登录二维码
- 定时(我设置的是每一秒)检测二维码状态:未扫描,已扫描,已登录,超时(这个未做测试,不过应该有这个环节)
- 二维码登录成功后,调用登录接口,获取首页和token(每次登录成功的token都不一样,在请求数据的时候token为必填参数)
- 访问登录成功后的页面
- 开始抓取数据
有几个点需要注意下:
- 必须要初始化页面,获取cookie中的u_id
- 密码是32位小写md5加密的,不能明文提交(这个可以通过抓包发现,实例代码中配置的是加密过后的数据)
- token必须获取,登录成功后请求数据都必须把token作为参数
- 请求header必须加 ‘referer’: ‘https://mp.weixin.qq.com/’ ,这个微信后台有做校验,虽然抓包的时候各个请求的header不一样,但是经试验,统一写成这个是没问题的,整个请求可以使用同一个header
- 登录流程比较长,有严格的cookie校验,为了方便,我是用的是client = requests.Session()来接收session,串联整个请求
- 示例代码使用的账号是被管理员加入了公众号运营的,所以登录很顺利,其他登录流程暂未尝试
- 本次试验是在window 7,python3 环境
示例代码
这里面的wechat.login.config.py是配置的账号和密码,就不宜贴出来了,insert操作是把数据插入mongodb里面,这里就不赘述了
其中有很多的请求都是用postman生成的,这里简单介绍下:
比如要用python3抓取百度首页
- 点击右方的code,左上角选择python->requests,就能自动生成代码了