微信公众号文章抓去 - 王麒麟

TP0907 2021-11-17 原文

微信公众号存在不少精彩的文章,如果善于挖掘,可以得到不少的收获。但由于微信对PC端的支持并不友好,虽然有搜狗搜索可以用,但其结果仍然不全,一些公众号发的不是文章类型的只是一段话,搜狗就不收录。想要得到一个账号所有的文章,还是要从爬虫着手。网上对于微信公众号文章爬取的方法几乎没有介绍,不过有几个网站,比如传送门就做出来了。这就告诉我们这个目标是可以达到的。废话不多说,直入主题。 要想得到一个公众号发送的所有文章,需要从微信手机端入手。点击公众号右上角小人图标,会有查看历史消息的链接。点了之后可查看所有历史文章。所以自然要从这里入手了。上抓包工具,Fiddler4,手机和电脑接入同一网络,手机wlan设置代理,指向电脑的ip地址,端口默认8888,这样在电脑上就可以监听手机的http流量了。通过抓包,在点击‘查看历史消息’选项时,请求的地址是 抓包1

通过对多个账号进行抓包分析,可以确定biz这个14位的字符串是每个公众号的“id”,uin似乎与访问者有关,key也和所访问的公众号有关,可以在下面的抓取中得到这两个参数,其他的查询参数都可以去掉。 所以,必须得到三个参数才可以得到文章列表。这三个参数biz最容易获得,在搜狗的微信平台,搜索目标公众号,会有对应的文章列表,连接到相应的文章页面。解析文章列表,即可得到公共账号的biz。可以通过请求http://weixin.sogou.com/weixin?query=,填入目标账号名称,返回的结果里解析最新文章的url,里面包含biz。当然,模糊搜索会出现多个候选账号,这个就比较难办了。 现在,已知biz,如何继续?我曾经也困扰了好久,也算是偶然发现的。电脑登陆微信,在手机上访问某个公众号的查看历史消息页面,点击右上角,发送给朋友,发送给文件助手即可,电脑上查看。 

如图

似乎看到连接了,打开,果然跳转到了文章列表的页面!查看元素,这个存在span标签内,仔细观察,才发现坑爹啊,和刚才抓包看到的url是一样的!继续寻找,这个spana标签的子元素,看这个a标签的hrefa 加上https://wx.qq.com的前缀,就可以访问了,最后301跳转到了span的内容那个url。多看几个不同的公众号,可以发现a标签的内容基本一样,不同的只是biz而已。所以可以把这个url记为raw_url,每次请求时,用不同的biz替换即可。当然,要带上ua,cookie的header。用request.get(url,headers=m_header,verify=False),因为请求的是https域,所以要加上verify=False,返回的内容文章列表的那个页面。分析那个页面,即可以找到uin,key, uin

可以用正则表达式提取出来。紧接着下面就是这个页面的msgList,类似json的文本,当前页面就是通过这里的文本渲染的。 msglist

可以用正则提取出来直接解析出来,然后用json.loads方法就可以得到dict,里面的信息包括content_url,文章发表的datetime时间戳,摘要信息,文章的id编号mid,还有是否是一次发多篇is_multi等。 鼠标向下滚动,可以看到动态请求更久远的文章,抓包可得,是通过json返回的。请求的url就是类似 json

这种的,前面获取的参数就都派上用场了。只要这几个参数就可以抓取了,后面几个参数不要也可以。要获得一个公众号的全部文章,可以将frommsgid改到比他最新文章的id大一点的数字(实验证明若刚好取最新文章的id,则会忽略最新的那篇),count值设置大一点,比如5000,基本上就会把所有文章信息都返回了。 根据返回的json,从中解析出文章的url,然后就可以去爬取文章了,这个比较常规,貌似连cookie都不用带,就不赘述了。

接下来再说说获取文章点赞数,阅读数的思路。从电脑网页访问是得不到这些数据的,只能从手机上获得。需要的参数还是uin,biz,key,mid以及idx。其中idx是这篇文章所在的编号,比如一个人一天发了3篇文章,idx就分别对应1,2,3。这几个参数的名称可能有些不一样,有时叫mid,有时是appmsgid,是从这样的url里获得的http://mp.weixin.qq.com/s?__biz=MzA3NTEzMTUwNA==&mid=206110593&idx=1&sn=bbebeb601bec2cd9bb576f31601774c5&scene=4#wechat_redirect,可能要进行一些异常处理。提交的地址是http://mp.weixin.qq.com/mp/getappmsgext,参数是上面提到的,提交的header要伪装成手机的,主要是ua,host要不要用我忘记了,之前的代码里是注释掉这句的, readnum_header={\'User-Agent\':\'Mozilla/5.0 (Linux; Android 4.4.2; sdk Build/KK) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36 MicroMessenger/6.0.0.61_r920612.501 NetType/epc.tmobile.com\',#\'Host\':\'mp.weixin.qq.com\'},然后返回的还是json,进行解析即可。

发表于
2016-08-16 15:44 
王麒麟 
阅读(787
评论(1
编辑 
收藏 
举报

 

版权声明:本文为TP0907原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/TP0907/p/5776649.html

微信公众号文章抓去 - 王麒麟的更多相关文章

  1. 小米root相关 – WillingCPP

    小米root相关 账号解锁 开启开发者选项: 设置->我的设备->全部参数-> 点击MIUI […]...

  2. [总结]视音频编解码技术零基础学习方法 – Samboo

    [总结]视音频编解码技术零基础学习方法 一直想把视音频编解码技术做一个简单的总结,可是苦于时间不充裕,一直没能 […]...

  3. Java容器类概述 – elvalad

    1.简介 容器是一种在一个单元里处理一组复杂元素的对象。使用集合框架理论上能够减少编程工作量,提高程序的速度和 […]...

  4. MATLAB — axis

    转至:http://blog.csdn.net/cs_zlg/article/details/8516463 […]...

  5. 浅析如何实现浏览器访问远程桌面/服务器界面:NoVNC – 以Web方式交付VNC远程连接

      最近项目需要实现那种在线实训平台,所以会记录一下技术选型然后学到的了解到的相关东西。看下这篇知乎文章:实验 […]...

  6. H5 + WebGL 展示的3D无人机

    前言近年来,无人机的发展越发迅速,既可民用于航拍,又可军用于侦察,涉及行业广泛,也被称为“会飞的照相机”。但作 […]...

  7. Linux基本操作命令 – 14的路

    Linux基本操作命令 Linux基本操作命令   首先介绍一个名词“控制台(console)”,它就是我们通 […]...

  8. 2020备考[嵌入式系统设计师]你准备好了吗? – leon11241124

    2020备考[嵌入式系统设计师]你准备好了吗? 2020年准备参加软考获取中级职业技术资格认证的小伙伴咱们约起 […]...

随机推荐

  1. 计算机网络 — OSI七层模型、TCP/IP四层模型、TCP/IP五层模型

        网络的构成就像一个社会,它的每一次迭代,都是为了解决一个具体的问题 《计算机网络》这门课为何如此之难? […]...

  2. 大数据学习-2 认识Hadoop

    大数据学习-2 认识Hadoop 一.什么是Hadoop? Hadoop可以简单的理解为一个数据存储和数据分析 […]...

  3. 在Docker中运行EOS(MAC版)

    在Docker中运行EOS(MAC版) 如今搞IT的不学点区块链都不好意思说自己是搞IT的,笔者开始学EOS了 […]...

  4. Git简记

    1. 如何在GitHub上下载资源? 有2种方法: (1)直接在WebBrowser中下载。 比如要下载 ht […]...

  5. png压缩工具-PngoutWin

          PngoutWin是一款聪明的png图片压缩工具,别的压缩工具压缩PNG是通过丢弃透明层来达到减肥 […]...

  6. 多渠道推广场景下,如何实现 App 用户增长的精准归因? – 马蜂窝技术

    多渠道推广场景下,如何实现 App 用户增长的精准归因? 一种精准归因 HTML5、WAP 广告投放的方法。 […]...

  7. springboot情操陶冶-web配置(二)

    承接前文springboot情操陶冶-web配置(一),在分析mvc的配置之前先了解下其默认的错误界面是如何显 […]...

  8. DSP开发笔记一

    前言 ​ 本笔记首先对DSP的特点及其选型进行了描述,然后重点记录DSP开发环境的搭建及基础工程示例,对为DS […]...