zoukankan      html  css  js  c++  java
  • 对WX公众号文章的爬取分析

    声明:请勿用于商业用途,以下只是个人兴趣分析以及技术分享,请各位自行斟酌处理,否则后果自负

    这篇文章很简短,主要的理论分析操作

     

    0.工具准备:

     

    • 微信号
    • 关注好目标公众号
    • charles

     

    1).准备一个微信号,建议不要用刚注册的微信号来操作,容易被封号,微信内部是有一套反爬系统的,你运气不好就会触发到

    2).关注好你需要爬取的公众号,因为要关注了,你才可以打开这个公众号的历史消息,不然的话,你只能看到最近的几篇文章,说白了就是看不全,搜狗搜索针对微信公众号的搜索我没猜错就是这样,所以只能看前几条信息,并且我发现搜狗搜索已经不好使了

    3).charles就是抓包工具,这个网上很多资源,配置步骤也有很多,这个就自行查看配置了,记得要装上ssl证书,配置好ssl的代理。

     

    那么有朋友要问,可以用fiddler替代charles吗?

     

    其他地方不出意外是可以的,但是这里,针对微信的还真的要用到charles,因为fiddler我试了,抓不到包,当然也可能是我用的fiddler版本问题,这个就自行选择吧,我个人建议还是用charles

     

     

    1.打开charles

     

    要先打开抓包工具,这样抓包工具才能嗅探到数据接口

     

     

     

     

     

     

    2.打开pc端微信,找到公众号

     

    登录pc端微信,然后打开公众号那一栏

     

     

     

     

     

     

    3. 找到目标公众号文章列表,获取链接

     找到目标公众号,然后点击一下,再点【查看历史消息】

     

     

     

    然后会从pc端的微信里打开一个页面,如下:

     

     

     

     

     

     

     

     

    4.用charles获取链接

    回到charles工具,此时已经嗅探到了数据接口,找到mp.weixin.qq.com的组合,从该组里找到profile_ext开头的第一个链接

     

     

     

     

      

     

    5.复制并拼接链接

     

    把上面获取到的链接,拿下来分析

    https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=保密==&scene=124&uin=保密%3D%3D&key=5cc14d5e215be3edfddab345c1e7d1545790a5d5106ac566ca33c21751c8578150126ebd750daa11336a1b536880ad8a814eb7be46e0e87e59f6c53828a3598637f04c6e8f8ebceb27fe27ed90797757&devicetype=Windows+10+x64&version=62090070&lang=zh_CN&a8scene=7&pass_ticket=lhCQ79EkT0QdVeeyIOeLJKN5WNTdCHysp252vVp7H4qdBHq5iSNThsQgO7qvPqul&winzoom=1

     

    这里面的参数看起来很复杂,其实主要的就是那几个

     

    根据我的分析发现,那个biz参数的值唯一,不同公众号有不同的值,且这个值是用base64转码过,反解回去是公众号id

    uin就是微信个人号的id然后base64转码过,这个值也是唯一的,一个号一个值

    key的值就是微信客户端本地自己生成的,这个就很难破解了,且这个key有30分钟时效性,如果超时的话,用charles重新获取下链接即可,并且根据我的分析得出,其实我觉得这30分钟是稳稳的够了的

     

     

    然后,上面打开的历史信息,其实是可以转成json格式,然后更利于我们写代码处理

     

    在那个公众号位置,就是有双等号的位置,添加以下字段

     

    &f=json&offset=0&count=10

     

     

     

    如下:

     

     

    https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=保密==&f=json&offset=0&count=10&scene=124&uin=保密%3D%3D&key=5cc14d5e215be3edfddab345c1e7d1545790a5d5106ac566ca33c21751c8578150126ebd750daa11336a1b536880ad8a814eb7be46e0e87e59f6c53828a3598637f04c6e8f8ebceb27fe27ed90797757&devicetype=Windows+10+x64&version=62090070&lang=zh_CN&a8scene=7&pass_ticket=lhCQ79EkT0QdVeeyIOeLJKN5WNTdCHysp252vVp7H4qdBHq5iSNThsQgO7qvPqul&winzoom=1
    

      

    拼接出来的链接可以用浏览器打开验证下:

     

     

     

     

     

     

    这个链接即是程序能处理的链接了,然后里面的文章链接,根据我的发现是永久的,不是临时,所以先爬取一级文章列表页,然后永久存储,然后设置个队列,再随机处理详情页,即我们需要的文章内容即可,同样的,操作也不能过于频繁

     

    如果你要翻页,改下拼接的参数中的offset的值即可,首页就是0,第二页就是10,第三页就是20......

     

    这里我再给几个微信的请求头,一般的浏览器请求头是会被识别屏蔽的,它会提示让你登录手机微信,反正就是打不开

     

    'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 MicroMessenger/6.5.2.501 NetType/WIFI WindowsWechat QBCore/3.43.884.400 QQBrowser/9.0.2524.400',
    'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/605.1.15 (KHTML, like Gecko) MicroMessenger/2.3.30(0x12031e10) MacWechat Chrome/39.0.2171.95 Safari/537.36 NetType/WIFI WindowsWechat MicroMessenger/2.3.30(0x12031e10) MacWechat Chrome/39.0.2171.95 Safari/537.36 NetType/WIFI WindowsWechat',
    'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36 QBCore/4.0.1301.400 QQBrowser/9.0.2524.400 Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2875.116 Safari/537.36 NetType/WIFI MicroMessenger/7.0.5 WindowsWechat',
    'Mozilla/5.0 (iPhone; CPU iPhone OS 12_4_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/7.0.12(0x17000c2d) NetType/WIFI Language/zh_CN'
    'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36'

     

     

    注:操作不能过于频繁,并且我个人建议,每天采集不要都用同一个号来爬取,准备几个号,换着换着来

     

    6.改进

     

    以上的说白了就是半自动的操作,如果你觉得每次还要手动的获取链接,然后拼接很繁琐,其实可以做成全自动的,大概就是用selenium/appium配合即可,网上也有这方面的教程,这里就不展示了,自行选择了

     

     

    好的,以上就是一些理论操作,具体的代码由于涉及到隐私问题,就不给代码展示了

     

     

  • 相关阅读:
    FastJson序列化枚举类
    优雅计时StopWatch
    spark算子之aggregateByKey
    scala系列列表
    iOS开发证书不受信任
    .NET Core 中的鉴权授权正确方式
    设置双击直接打开.ipynb文件
    Ubuntu18添加开机启动项
    iOS ObjectC 笔记(二)GCD
    iOS VideoToolBox decoder解码失败(12909和12911)问题解决(二)
  • 原文地址:https://www.cnblogs.com/Eeyhan/p/12967935.html
Copyright © 2011-2022 走看看