前几天,朋友有一个爬取某些指定微信公众号的历史文章的需求,刚好自己闲的没事,也就试了一试。不算完美解决问题了吧,但是自己也无能为力了,毕竟腾讯那么牛,斗不过斗不过。
一、思路
看了一些别人的文章,综合对比搜狗微信和用fiddler抓取的办法,都比较复杂。这里还有一种比较好懂的方法,通过注册一个自己的微信公众号,拿自己号的信息去爬取,这样限制比较少一些。
我这里主要获取三个字段(公众号名字,公众号的文章名,对应文章名的链接)。
二、步骤方法
1.
先注册一个自己的微信公众号
2.
登陆自己的微信公众号,拿到两个东西。
第一个url里面的token值
第二个cookie值
3.
找到你要爬取的那个微信公众号的fakeid
在登陆的微信公众号左侧工具栏点击【素材管理】,再点击【新建图文素材】
点击上面超链接符号
1选择查找文章。
2输入公众号名字,我以江西水利为例
3点击查找到的公众号
随便点击一篇文章,进入文章详情页。
在打开的url中找到_biz的值(这个值也叫fakeid),复制下来。
准备工作已经到位了,下面开始写代码。
三、代码阶段
1
导包
2.
连接数据库和关闭数据库的两个函数,我用的是mysql数据库,自己修改代码写入到csv文件也是可以的。
3.
header,用来伪装。
4.
数据准备
在这里将要爬取的公众号和对应的fakeid写入一个字典,方便修改。
我获取了两组token和cookie的值,到时候利用随机函数调用其中的一套来防止访问太频繁而封号。
5.
主函数
6.运行结果
打开mysql
ok,完工啦。
写在最后
程序的问题主要是,爬了一段时间后,会被封,封IP还是封id,还没有搞清楚。昨天爬了1500篇文章后出现了这个。
被频率控制了。。。。。
如果谁有更好的解决办法,欢迎来交流啊。
源码下载地址:
提取码:j2q1