python爬虫爬取微信公众号的阅读数、喜爱数、文章标题和链接等信息

爬虫的步骤:
(1)申请自己的公众号
(2)使用fiddler抓包工具
(3)pycharm
(一)申请公众号
官网:微信公众平台
填入相关信息创建微信公众号
进入公众号界面如下:

python爬虫爬取微信公众号的阅读数、喜爱数、文章标题和链接等信息
找到新的创作-图文信息
python爬虫爬取微信公众号的阅读数、喜爱数、文章标题和链接等信息
python爬虫爬取微信公众号的阅读数、喜爱数、文章标题和链接等信息
在弹出的界面中查找公众号文章-输入公众号名称-确定
python爬虫爬取微信公众号的阅读数、喜爱数、文章标题和链接等信息
python爬虫爬取微信公众号的阅读数、喜爱数、文章标题和链接等信息
点击确认之后,进入公众号,可以查看相应文章。
python爬虫爬取微信公众号的阅读数、喜爱数、文章标题和链接等信息
右键单击空白处,选择检查-网络,显示界面如下:
python爬虫爬取微信公众号的阅读数、喜爱数、文章标题和链接等信息

在请求标头中获取 cookieuser-agent

python爬虫爬取微信公众号的阅读数、喜爱数、文章标题和链接等信息
python爬虫爬取微信公众号的阅读数、喜爱数、文章标题和链接等信息

同时还需要获取 Fakeidtoken
fakeid:是公众号独一无二的一个id
token:是自己的公众号独有的id

python爬虫爬取微信公众号的阅读数、喜爱数、文章标题和链接等信息
以上已经获取到了电脑端需要的4个重要参数:
Cookies、user-Agent 、fakeid 、token
爬取点赞数和阅读数:
在之前查找公众号的文章时,可以在相应信息中查找到文章的相关信息:
python爬虫爬取微信公众号的阅读数、喜爱数、文章标题和链接等信息
观察这些信息,可以在信息中找到公众号的文章标题,文章对应的链接
python爬虫爬取微信公众号的阅读数、喜爱数、文章标题和链接等信息
将文章链接复制到浏览器中,可以看到对应的公众号文章:
python爬虫爬取微信公众号的阅读数、喜爱数、文章标题和链接等信息
得到文章的链接之后,需要从链接中找到pass_ticket 、 appmsg_tojen 、 cookies 、user-Agent 、key。
通过fiddler抓包,得到这些参数
打开fiddler,选择过滤器
python爬虫爬取微信公众号的阅读数、喜爱数、文章标题和链接等信息
设置以下参数,点击action,设定只抓取关于微信公众相关的包
python爬虫爬取微信公众号的阅读数、喜爱数、文章标题和链接等信息
之后进入自己的微信客户端-选择公众号-查看历史信息-点开公众号的文章。
这时可以看到fiddler中出现一系列的包,依次点击抓取的包,在inspectors中查看以下信息,获取 pc微信端cookie 和user-agent
python爬虫爬取微信公众号的阅读数、喜爱数、文章标题和链接等信息
切换点击界面,可以看到如下信息:
python爬虫爬取微信公众号的阅读数、喜爱数、文章标题和链接等信息
可以从上面的界面中找到需要保存的参数:

更换公众号爬虫只需要更换PC微信的Key、 pass_ticket、 appmsg_tojen以及公众号的Fakeid。对某一公众号爬虫时,KEY大约20-30分钟会失效。可以再次打开fiddler重新进行获取。

贴一下我的代码:


import requests
import time
import json
from openpyxl import Workbook
import random

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

Cookie = "自己的cookies"

headers = {
    "Cookie": Cookie,
    "User-Agent": "自己的user-agent",
}

"""
需要提交的data
以下个别字段是否一定需要还未验证。
注意修改yourtoken,number
number表示从第number页开始爬取,为5的倍数,从0开始。如0、5、10......

token可以使用Chrome自带的工具进行获取
fakeid是公众号独一无二的一个id,等同于后面的__biz
"""
token = "自己公众号的token"
fakeid = "Mzk0NzI5NDc5MA%3D%3D"
type = '9'

data1 = {
    "token": token,
    "lang": "zh_CN",
    "f": "json",
    "ajax": "1",
    "action": "list_ex",
    "begin": "0",
    "count": "4",
    "query": "",
    "fakeid": fakeid,
    "type": type,
}

def getMoreInfo(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]

    pass_ticket = "fiddler中获取"
    appmsg_token = "fiddler中获取"

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

    phoneCookie = "在fiddler中获取"
    headers = {
        "Cookie": phoneCookie,
        "User-Agent": "fiddler中获取"
    }

    data = {
        "is_only_read": "1",
        "is_temp_url": "0",
        "appmsg_type": "9",
        'reward_uin_count': '0'
    }
"""
    添加请求参数
    __biz对应公众号的信息,唯一
    mid、sn、idx分别对应每篇文章的url的信息,需要从url中进行提取
    key、appmsg_token从fiddler上复制即可
    pass_ticket对应的文章的信息,也可以直接从fiddler复制
"""
    params = {
        "__biz": _biz,
        "mid": mid,
        "sn": sn,
        "idx": idx,
        "key": "fiddler中获取",
        "pass_ticket": pass_ticket,
        "appmsg_token": appmsg_token,
        "uin": "MTUyNzExNzYy",
        "wxtoken": "777",
    }

    requests.packages.urllib3.disable_warnings()
    content = requests.post(url, headers=headers, data=data, params=params).json()

    try:
        readNum = content["appmsgstat"]["read_num"]
        print("阅读数:"+str(readNum))
    except:
        readNum = 0
    try:
        likeNum = content["appmsgstat"]["like_num"]
        print("喜爱数:"+str(likeNum))
    except:
        likeNum = 0
    try:
        old_like_num = content["appmsgstat"]["old_like_num"]
        print("在读数:"+str(old_like_num))
    except:
        old_like_num = 0

    time.sleep(3)
    return readNum, likeNum,old_like_num

def getAllInfo(url):

    messageAllInfo = []

    for i in range(33):
        begin = i * 4
        data1["begin"] = begin
        requests.packages.urllib3.disable_warnings()
        content_json = requests.get(url, headers=headers, params=data1, verify=False).json()
        time.sleep(random.randint(1, 10))
        if "app_msg_list" in content_json:
            for item in content_json["app_msg_list"]:
                spider_url = item['link']
                readNum, likeNum,old_like_num = getMoreInfo(spider_url)
                info = {
                    "title": item['title'],
                    "url": item['link'],
                    "readNum": readNum,
                    "likeNum": likeNum,
                    "old_like_num":old_like_num
                }
                messageAllInfo.append(info)
    return messageAllInfo

def main():
    f = Workbook()
    sheet = f.active

    sheet.cell(row=1, column=1).value = 'title'
    sheet.cell(row=1, column=2).value = 'url'
    sheet.cell(row=1, column=3).value = 'readNum(阅读数)'
    sheet.cell(row=1, column=4).value = 'likeNum(喜爱数)'
    sheet.cell(row=1, column=5).value = 'old_like_num(在看数)'
    messageAllInfo = getAllInfo(url)
    print(messageAllInfo)
    print(len(messageAllInfo))

    for i in range(1, len(messageAllInfo)+1):
        sheet.cell(row=i + 1, column=1).value = messageAllInfo[i - 1]['title']
        sheet.cell(row=i + 1, column=2).value = messageAllInfo[i - 1]['url']
        sheet.cell(row=i + 1, column=3).value = messageAllInfo[i - 1]['readNum']
        sheet.cell(row=i + 1, column=4).value = messageAllInfo[i - 1]['likeNum']
        sheet.cell(row=i + 1, column=5).value = messageAllInfo[i - 1]['old_like_num']
    f.save(u'公众号.xls')
if __name__ == '__main__':
    main()

Original: https://blog.csdn.net/weixin_46569877/article/details/126155509
Author: 精分天秤座的mystery
Title: python爬虫爬取微信公众号的阅读数、喜爱数、文章标题和链接等信息

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/671594/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球