爬取微信公众号发布的所有文章(包括阅读数,在看数,点赞数)

这次写爬虫。我爬取了某个微信公众号的全部文章

  • 文章链接 url

  • 文章标题 title

  • 发布时间 update_time

  • 封面链接 cover

  • 阅读数 read_num

  • 在看数 like_num

若想直接拿代码来用,可以直接跳到最后。

首先要找到所有文章链接地址

一般来说,网上是搜不到某个公众号的全部文章的。但是我们利用 微信公众号平台 就能够一次性找到。

要用到它,肯定需要先注册登录一个微信公众号。当我们来到后台界面。

在这里插入图片描述

进入素材管理——> 新建图文——> (上方的)超链接界面

在这里插入图片描述
当我们打开开发者工具,搜索点击某个公众号后,就会抓到一个get请求包
在这里插入图片描述
它返回的就是文章相关的信息(包含了,文章链接,文章标题,创建时间,封面地址等)
在这里插入图片描述

因此找到请求后,我们开始构造

url 肯定是不变的 https://mp.weixin.qq.com/cgi-bin/appmsg
请求头复制粘贴过去
在这里插入图片描述
get请求的参数params也能直接进行复制
在这里插入图片描述
这里的begin代表的是页数,如果需要更多数据,肯定是需要翻页的。多次请求改变begin的值就可以了

第一部分的代码如下

import requests
import time
import datetime
import pytz

url="https://mp.weixin.qq.com/cgi-bin/appmsg"

#我这里先把数据写入到txt文件中

f=open("微信公众号文章.txt",mode="w",encoding="utf-8")
headers={
		#这里是你自己的headers
}
params={
		#这里是你自己的params
}
begin=0

#发起第一次请求
resp=requests.get(url,headers=headers,params=params,verify=False)

data = resp.json()
while True:
    time.sleep(5)
    
    
    #data['app_msg_list']里面装载的就是我们需要的数据
    if len(data['app_msg_list'])==0:
    	#可能数据请求完了,可能请求失败,可能你的微信公众号请求被禁用一段时间(因为爬数据过于频繁,被发现了)
        break
    for app_msg in data['app_msg_list']:
        title = app_msg['title']  #文章标题
        link = app_msg['link']    #文章链接
        update_time=app_msg['update_time']   #文章创建时间,为时间戳
        #将时间戳转为 年月日,时分秒
        update_time = datetime.datetime.fromtimestamp(int(update_time), pytz.timezone('Asia/Shanghai')).strftime('%m/%d/%Y %H:%M:%S')  
        cover =app_msg['cover']  #文章封面图片地址
    
    #请求下一页的数据
    begin+=1
    params['begin']=begin*5

    resp = requests.get(url, headers=headers, params=params,verify=False)
    data = resp.json()
print(resp)

要值得注意的是,在第一步时候,如果请求过于频繁,Cookie会被服务器暂时封禁(自测是几十分钟)。每次请求之前间隔几秒休息,也不太好使。这时候就只能换一个公众号或者等个几十分钟。再次运行。(一次能抓60页左右的数据)

然后我们如何获取到文章的详细信息呢?包括阅读数,在看数

我们知道,从PC端微信里面,进入公众号后点击文章。下面会有阅读数,在看数等数据信息。直接从浏览器看文章的话是没有的。

因为PC端微信请求文章内容,附带了一些参数,是浏览器没有的。导致服务器那边没有返回这些实时数据(阅读数,在看数)

所有我们要用工具抓包。抓取微信在点开文章时发送的请求。

我这里使用的抓包工具是 Fiddler。官网下载地址为:
链接: Fidder抓包工具官网地址.
简单的使用我就不交了,能抓包就行。

监听的时候,我们随便点击我们要爬取的公众号的随便一篇文章
在这里插入图片描述
抓到了一个以** /mp/getappmsgext? ** 为POST提交的 url 地址。如下图
在这里插入图片描述
通过分析返回的response里面的json数据。就有我们的阅读数(read_num)和在看数(like_num)。如下图

当然要提取页面其它数据,都是可以的。
在这里插入图片描述
因此,我们根据该POST的请求信息,构造requests,就能拿到某一篇文章阅读数和在看数了。详细见如下代码

(提示!如果你想直接拿代码用,你自己需要弄到参数有5个)。

  • phoneCookie
  • uin
  • pass_ticket
  • appmsg_token
  • key
# 获取阅读数和点赞数
import requests
import time

def getMoreInfo(link):

    # 获得mid,_biz,idx,sn 这几个在link中的信息。
    mid = link.split("&")[1].split("=")[1]
    idx = link.split("&")[2].split("=")[1]
    sn = link.split("&")[3].split("=")[1]
    _biz = link.split("&")[0].split("_biz=")[1]

    #该4个参数,需要自己从抓的包里面的请求头里面去获取,
    uin = 'MTcwMDU3OTA4Mg=='
    pass_ticket = 'FHAPWEyH4En5JI9SyHXcUtAfV1pxn/W/BMXpVnaOGQDhbD709+wejbXJCVLDGjvz'
    appmsg_token = '1130_Tml%2BYcZMk8oJAMuu6NYwpkTS-XtM-kz5LNJQv6N9AvC_sFfoc6dwKaHOYy4vNTEnvq7_bc6-HDgxo9mk'
    key = "7f92ccecf3278296917b0c74884016e74c45da721ac3a5c1f6895b2ea9a7a8f9f555af415fe9e63d2ed2ae943c7a643907e586cc622938b8d942055605523620b14d99c0368ea9a9202af4adf3311a1ebba37f6cb75b1041e84f02b59ae30e9ed498d996f66f75b9b7aa12403d117dd01f2f92c19b04e5aba3bcb669659551d0"


    # 目标url
    url = "http://mp.weixin.qq.com/mp/getappmsgext"

    # 添加Cookie避免登陆操作。Cookie需要自己从抓的包里面去获取
    phoneCookie = "rewardsn=; wxtokenkey=777; wxuin=1700579082; lang=zh_CN; appmsg_token=1130_Tml%2BYcZMk8oJAMuu6NYwpkTS-XtM-kz5LNJQv6N9AvC_sFfoc6dwKaHOYy4vNTEnvq7_bc6-HDgxo9mk; devicetype=Windows10x64; version=63030532; pass_ticket=FHAPWEyH4En5JI9SyHXcUtAfV1pxn/W/BMXpVnaOGQDhbD709+wejbXJCVLDGjvz; wap_sid2=CIqO86oGEooBeV9IUGFHMElKRUJpdENjbGd0QWxxd0RDUHEwWm5IV1JTMlFDVExncGVuYnh1bmRwSUpxVHV6U1hCbG5JQXE1UTh5V3FlOUh1V0JPeUxwcFVrR3V0REZ0NGJGRHB2VVpqcS1Md3J6WHlsY3VPQzkzOHVWTlk4NDlmTFFjOFgzdDgwVGJrY1NBQUF+MOO54YkGOA1AAQ=="


    #这里的"User-Agent"最好为手机浏览器的标识
    headers = {
        "Cookie": phoneCookie,
        "User-Agent": "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.901.400 QQBrowser/9.0.2524.400"
    }

    # 添加data,`req_id`、`pass_ticket`。
    data = {
        "is_only_read": "1",
        "is_temp_url": "0",
        "appmsg_type": "9",
        'reward_uin_count': '0'
    }


   #根据获取到的参数,构造PSOT请求的params
    params = {
        "__biz": _biz,
        "mid": mid,
        "sn": sn,
        "idx": idx,
        "key": key,
        "pass_ticket": pass_ticket,
        "appmsg_token": appmsg_token,
        "uin": uin,
        "wxtoken": "777",
    }
    #post请求提交后,将返回的respone转为json
    json = requests.post(url, headers=headers, data=data, params=params).json()

    #获取到阅读数
    read_num=json['appmsgstat']['read_num']

    # 获取到在看书
    like_num=json["appmsgstat"]["like_num"]
    print(read_num,like_num)

#随便某一篇文章的url地址
url="http://mp.weixin.qq.com/s?__biz=MjM5Nzc5OTcxNA==&mid=2651014142&idx=1&sn=5f00452e553dad1f0621ca82b1a674bd&chksm=bd2391b38a5418a5dbcdeacbd738289fc8c421c7f0b125b97be21f65463b87d12d1c9ce75436#rd"
getMoreInfo(url)

同样值得注意的是,在第二步的时候,我们也同样不能请求过于频繁,间隔几秒请求 没有问题。如果被禁用了,再次抓包即可。

这些一下来就能根据公众号的名称,获取到它下面的所有文章的详细信息。

如果写得不好的地方请指正,欢迎和我学习交流!

  • 24
    点赞
  • 159
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 39
    评论
爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL可以通过链接分析、站点地图、搜索引擎等方式获取。 请求网页: 爬虫使用HTTP或其他协议向目标URL发起请求,获取网页的HTML内容。这通常通过HTTP请求库实现,如Python中的Requests库。 解析内容: 爬虫对获取的HTML进行解析,提取有用的信息。常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用的存储形式包括关系型数据库、NoSQL数据库、JSON文件等。 遵守规则: 为避免对网站造成过大负担或触发反爬虫机制,爬虫需要遵守网站的robots.txt协议,限制访问频率和深度,并模拟人类访问行为,如设置User-Agent。 反爬虫应对: 由于爬虫的存在,一些网站采取了反爬虫措施,如验证码、IP封锁等。爬虫工程师需要设计相应的策略来应对这些挑战。 爬虫在各个领域都有广泛的应用,包括搜索引擎索引、数据挖掘、价格监测、新闻聚合等。然而,使用爬虫需要遵守法律和伦理规范,尊重网站的使用政策,并确保对被访问网站的服务器负责。
Python可以用于爬取微信公众号文章。有几种方式可以实现这一目标,其中一种方式是通过登录微信公众号平台,在里面搜索要爬取的公众号,然后进行抓包。另外一种方式是使用安卓模拟器进行抓包。还可以使用搜狗的微信模块来获取数据。 在使用第一种方式时,首先需要拥有一个微信公众号的账号。然后,通过工具如pycharm和fiddler等,登录微信公众号平台,进入创作管理,选择图文素材,然后创建或编辑文章。最后,通过添加引用和查找公众号文章等步骤,进行数据的爬取和收集。 在实现这些步骤之前,你需要了解微信公众号平台的主要功能和界面布局。主面板可以划分为七大块,每个块都有不同的功能。在后续的操作中,你可以使用Python代码来模拟微信请求,并实现数据的爬取和分析。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [欢度国庆⭐️共享爬虫之美⭐️基于 Python 实现微信公众号爬虫Python无所不能爬)](https://blog.csdn.net/xiejiachao/article/details/120573509)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [【爬虫python爬取微信公众号](https://blog.csdn.net/qq_36269293/article/details/109244944)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 39
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小梁说代码

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值