美文网首页python学习pythonPython小哥哥
python通过手机抓取微信公众号

python通过手机抓取微信公众号

作者: 我爱学python | 来源:发表于2019-06-19 15:51 被阅读31次

    用 Fiddler 抓包分析公众号

    打开微信随便选择一个公众号,查看公众号的所有历史文章列表

     在 Fiddler 上已经能看到有请求进来了,说明公众号的文章走的都是HTTPS协议,这些请求就是微信客户端向微信服务器发送的HTTP请求。

    模拟微信请求

    1、服务器的响应结果,200 表示服务器对该请求响应成功

    2、请求协议,微信的请求协议都是基 于HTTPS 的,所以Fiddle一定要配置好,不然你看不到 HTTPS 的请求。

    3、请求路径,包括了请求方法(GET),请求协议(HTTP/1.1),请求路径(/mp/profile_ext...后面还有很长一串参数)

    4、包括Cookie信息在内的请求头。

    5、微信服务器返回的响应数据。

    确定微信公众号的请求HOST是mp.weixin.qq.com 之后,我们可以使用过滤器来过滤掉不相关的请求。

    爬虫的基本原理就是模拟浏览器发送 HTTP 请求,然后从服务器得到响应结果,现在我们就用 Python 实现如何发送一个 HTTP 请求。这里我们使用 requests 库来发送请求。

    拷贝URL和请求头

    1:找到完整URL请求地址

    2:找到完整的请求头(headers)信息,Headers里面包括了cookie、User-agent、Host 等信息。

    我们直接从 Fiddler 请求中拷贝 URL 和 Headers, 右键 -> Copy -> Just Url/Headers Only

    因为 requests.get 方法里面的 headers 参数必须是字典对象,所以,先要写个函数把刚刚拷贝的字符串转换成字典对象。

    公众号历史文章数据就在 response.text 中。如果返回的内容非常短,而且title标签是<title>验证</title>,

    那么说明你的请求参数或者请求头有误,最有可能的一种请求就是 Headers 里面的 Cookie 字段过期,

    从手机微信端重新发起一次请求获取最新的请求参数和请求头试试

    历史文章封装在叫 msgList 的数组中(实际上该数组包装在字典结构中),这是一个 Json 格式的数据,但是里面还有 html 转义字符需要处理

    写一个方法提取出历史文章数据,分三个步骤,首先用正则提取数据内容,然后 html 转义处理,最终得到一个列表对象,返回最近发布的10篇文章

    最终提取出来的数据总共有10条,就是最近发表的10条数据,我们看看每条数据返回有哪些字段。

    发送时间对应comm_msg_info.datetime,app_msg_ext_info中的字段信息就是第一篇文章的字段信息,分别对应:

    title:文章标题

    content_url:文章链接

    source_url:原文链接,有可能为空

    digest:摘要

    cover:封面图

    datetime:推送时间

    后面几篇文章以列表的形式保存在 multi_app_msg_item_list 字段中。

     详细代码

    相关文章

      网友评论

        本文标题:python通过手机抓取微信公众号

        本文链接:https://www.haomeiwen.com/subject/lxykqctx.html