有一天发现我关注了好多微信公众号,那时就想有没有什么办法能够将微信公众号的文章弄下来,而且还想将一些文章的精彩评论一起搞下来。参考了一些文章,通过几天的研究基本上实现了自己的要求,现在记录一下自己的一些心得。

整个研究过程如下:
1.了解微信公众号文章链接的组成,历史文章API组成,单个文章评论API组成,访问微信公众号的cookie组成;
2.分析历史文章API以及单个文章评论API的结构,构建爬虫进行爬取;
前面两点需要借助于抓包工具Fiddler,下面会详细介绍抓包结果的分析,上一篇文章有介绍“ Fiddler在PC/台式对Android进行抓包”
3.设计表结构,将爬虫获取的数据存入到mysql数据库;
4.对获取的数据库信息进行过滤整理,将相关内容输出,选择相应文章进行阅读并消化。

一、微信公众号图文消息的链接组成
微信公众帐号群发的图文消息一般情况下是在微信公众平台上编辑和产生的。
我们先从比较有名的公众号“逻辑思维”的图文消息看看一篇图文消息链接的组成元素:
逻辑思维有一篇每天60秒的文章【罗胖60秒:一个“智慧系统”是什么样的?】,在微信打开通过浏览器查看到链接
http://mp.weixin.qq.com/s?__biz=MjM5NjAxOTU4MA==&mid=3009217237&idx=2&sn=881c0a758a43348e2e7602110862f6ec&chksm=90460ec6a73187d00ebc007b1429609573ca42b9ef1dd74d860b4716f04b63661b15cbee2c6b&mpshare=1&scene=23&srcid=1202m2DVBW8OubvaR1DcXF0a#rd
上面链接中的参数有__biz,mid,idx,sn,chksm,mpshare,scene和srcid
其实主要参数只有__biz,mid,idx和sn四个参数,而这四个参数能唯一确定一篇微信公众平台的图文消息,所以以下链接就可以访问文章
https://mp.weixin.qq.com/s?__biz=MjM5NjAxOTU4MA==&mid=3009217237&idx=2&sn=881c0a758a43348e2e7602110862f6ec
这四个参数的含义是:
__biz可以认为是微信公众平台对外公布的公众帐号的唯一id,而这个__biz参数能用来生成公众帐号的二维码
mid是图文消息id,每篇文章这个消息id都唯一
idx是发布的第几条消息(1就代表是头条位置消息,2代表第二条)
sn是一个随机加密串(对于一篇图文消息是唯一的,如果你想问这个sn的生成规则是什么或者怎么破解,你基本上只能从微信公众平台开发团队才能得到答案)
另外,对于除了__biz之外的三个参数,mid/idx/sn 可以分别写成 appmsgid/itemidx/sign,比如还是之前文章,用如下链接一样可以访问到:
https://mp.weixin.qq.com/s?__biz=MjM5NjAxOTU4MA==&appmsgid=3009217237&itemidx=2&sign=881c0a758a43348e2e7602110862f6ec
其实在早期,只需要__biz, mid和idx三个参数即可确定一篇微信公众平台的图文消息,微信后来增加一个参数sn(sign),这样做的原因是:
微信公众平台的图文消息首先在后台保存为了一篇素材才能发布,而这个素材也会生成一个链接,在早期这个素材的链接就是后来要发布的文章的链接,而从上面这篇文章的链接你能猜出来,只需要改变mid(图文消息id)这个值,比如这篇文章的mid是10000382,对这个数字加上1或者2就极有可能是下一篇图文消息或者素材的链接,这样用户就有可能提前阅读到公众帐号已经写好并保存但还没群发的素材了。
所以分布文章时会加上一个随机生成的参数sn,确保文章无法被知道。

二、微信公众号历史文章API组成
在公众号主页,右上角有个人上半身图标,点击进入消息界面,下滑找到并点击“全部消息”,往下请求加载几次历史文章,然后回到Fiddler界面,不出意外的话应该可以看到这几次请求,可以看到返回的数据是json格式的,同时文章数据是以json字符串的形式定义在general_msg_list字段中:
https://mp.weixin.qq.com/mp/profile_ext?action=getmsg&__biz=MjM5NjAxOTU4MA==&f=json&offset=10&count=10&is_ok=1&scene=126&uin=777&key=777&pass_ticket=pI3viTq3ke7q4XBuvPFfW04X1NN374CuTXRryqcWqIUGGXvrmHzytAth%2BMUWmDEv&wxtoken=&appmsg_token=985_CXzmkHn3e3dS9vsefAmdITS4irh69Rk351ye-w~~&x5=1&f=json


以下介绍几个主要参数:
- __biz:相当于是当前公众号的id(唯一固定标志) 
- offset:文章数据接口请求偏移量标志(从0开始),每次返回的json数据中会有下一次请求的offset,这里一般是按10递增的 
- count:每次请求的数据量(亲测最多可以是10) ,所以可以固定为10
- pass_ticket:可以理解是请求票据,而且隔一段时间后(大概几个小时)就会过期,失效后都需要重新抓包替换
- appmsg_token:同样理解为非固定有过期策略的票据,失效后都需要重新抓包替换

三、微信公众号访问的cookie组成:

访问微信公众号历史文章,我们是需要登录的,我们可以通过构建cookie去跳过登录过程
通过访问微信公众号文章,我们通过Fiddler抓包可以看到cookie的相关信息

其中pass_ticket和wap_sid2不是固定的,经常有变化,失效了都需要重新抓包,而其他wxtokenkey,wxuin,devicetype,version等只要微信号不变,登录设备不变都不会改变。

四、微信公众号单个文章评论API组成
通过访问微信公众号文章,我们抓包可以得到文章评论的API,这个返回的也是json格式,评论存储在elected_comment
https://mp.weixin.qq.com/mp/appmsg_comment?action=getcomment&scene=0&__biz=MjM5NjAxOTU4MA==&appmsgid=3009217642&idx=2&comment_id=578089232589930496&offset=0&limit=100&uin=777&key=777&pass_ticket=v+7PaoESYfMrxgXJpqOkfXV4Y2+gYNPPJfSSmzPXfeiuNrNiBeEcs+8b//Yit5sd&wxtoken=777&devicetype=android-26&clientversion=2607033b&appmsg_token=986_jbuKqpV9lCZ1cb787Tem5V5n6JKpU9TrOFUZRE5esVxnBK7IR-TsZiXLRNaO1tnfx4rkIk1xyFHRlqI7&x5=1&f=json

还是介绍一下其中的主要参数:
- __biz:和历史文章列表中一致,微信公众号ID
- comment_id:评论的id,一篇文章唯一
- appmsgid:图文消息ID,与文章有关(文章链接中的mid)
- pass_ticket:请求票据,同一时间段内历史文章API和单个文章评论API一致
- appmsg_token:非固定有过期策略的票据,同一时间段内历史文章API和单个文章评论API不一致
以上主要介绍了整个研究过程的第一点,下面将会分析历史文章API和单个文章评论API的返回

【Python爬虫】爬取微信公众号文章信息准备工作相关推荐

  1. python爬虫爬取微信公众号小程序信息

    python爬虫爬取微信公众号小程序信息 爬取内容 某汽车维修信息提供的维修店名称,地点以及电话(手机)号码 爬取步骤 啥也别管,先抓包看看,在这里,博主使用的抓包软件是charles 抓包:将网络传 ...

  2. python爬虫——爬取微信公众号的文章及图片

    参考 爬取公众号所有文章 想要爬取微信公众号的所有文章,微信只有文章是有地址的,如何找到这个公众号的所有文章呢? 找到该公众号的链接 打开公众号平台,找到创作图文消息 这样就找到了微信号 打开检查模式 ...

  3. Python2.7爬虫——爬取微信公众号文章

    今天跟着这篇博客抓取微信公众号文章练习了一下爬虫,运行成功.想和大家分享一下过程中出现的问题和解决方法. 运行环境 windows 7 + Pycharm2018 + Python 2.7 目录 目录 ...

  4. [python爬虫]爬取微信公众号

    爬取微信公众号 微信公众号接口 使用的包 需要的三个文件(Account.cookie.list) 代码如下 显示结果 总 结 微信公众号接口 目前是个功能需要一个微信号并且允许网页微信登陆,我们就是 ...

  5. python爬虫爬取微信网页_python下爬虫爬取微信公众号文章给网站的相关操作与问题...

    一.出发点 在dodo团队知乎号开刊文章中已介绍过本团队平常的实际工作,我们是一个从事游戏与金融结合的项目开发与运营团队.技术上主要是从事游戏分期.玩后付支付插件.游戏充值app等前后端开发,主要使用 ...

  6. python爬虫抓取微信公众号文章(含全文图以及点赞数、在看数、阅读数)

    因工作需要写了一个微信公众号文章的爬虫程序,贴一下分享给需要的朋友. 首先是抓取文章的url链接,在反复研究之后找到的一个最简单的方法,不需要抓包工具.首先需要自己注册一个微信公众号,有微信即可绑定注 ...

  7. Python爬虫 selenium自动化 利用搜狗搜索爬取微信公众号文章信息

    少年最好的地方就是:虽然嘴上说要放弃,心底却总会憋着一口气.--刘同 文章目录 一.需求和网页分析 二.selenium爬虫 一.需求和网页分析 URL:https://weixin.sogou.co ...

  8. Python批量爬取微信公众号文章中的图片重建PowerPoint文件

    开学第一课:一定不要这样问老师Python问题 董付国老师Python系列教材推荐与选用参考 3000道Python习题免费在线练习 ============= 版权声明:由于公众号后台规则问题,本文 ...

  9. python爬取微信公众号文章信息

    就我了解的爬取方法,主要有三种爬取方法,通过搜狗微信,微信订阅号后台和手机端. 我采取了前两种方法.但是搜狗微信爬取的url是有时间限制的,会失效,之后要用别的方法转永久链接,微信订阅号并不会,但是一 ...

最新文章

  1. Java与C/C++的比较(转)
  2. 四个C++函数模板实例
  3. maven error in opening zip file报错解决
  4. 快速傅里叶变换python_【原创】OpenCV-Python系列之傅里叶变换(三十八)
  5. 传Facebook将推出应用中心挑战谷歌搜索地位
  6. UITextView: 响应键盘的 return 事件(收回键盘)
  7. 赢在电子商务网站制作与营销:B2C版
  8. false在python什么意思_python – `x [False]`在numpy中做什么?
  9. iOS开发日记56-详解UIImage
  10. hibernate一对多双向关联中怎么配置list
  11. 怎么设置访问服务器文件夹权限凭据,Windows server 共享文件夹权限设置
  12. 怎么压缩PPT大小?
  13. TypeScript 学习笔记
  14. php函数大小写转化,php大小写转换函数(strtolower、strtoupper)用法介绍
  15. 云计算与大数据技术应用前四章知识点整理
  16. 谈下我曾经做过的一个心理健康管理系统
  17. PHP ab 压力并发测试
  18. 视觉SLAM十四讲读书笔记(2)P10-P27
  19. java oj_用java怎么做oj啊
  20. 转:PL/0语言词法及语法分析系统的设计与实现

热门文章

  1. 有奖答题小程序知识问答pk答题app源码
  2. Planbar 2018 新功能 BIM 加密狗更新
  3. 144个stm32开发相关的问题,看你了解几个
  4. Unity光照效果_自发光动态改变并影响环境
  5. 像素颜色和颜色向量相加相乘的理解
  6. $oracle什么意思,oracle惯用缩写的含义
  7. Refused to display ‘https://xxx.com.cn‘ in a frame because it set ‘X-Frame-Options‘ to ‘sameorigin‘
  8. 用node.js 搭建的博客程序心得(node.js实战读书笔记1)
  9. 模拟器录制视频 小技巧
  10. WPF无弹窗打印_se7en3_新浪博客