爬虫的步骤:
(1)申请自己的公众号
(2)使用fiddler抓包工具
(3)pycharm
(一)申请公众号
官网:微信公众平台
填入相关信息创建微信公众号
进入公众号界面如下:
找到新的创作-图文信息
在弹出的界面中查找公众号文章-输入公众号名称-确定
点击确认之后,进入公众号,可以查看相应文章。
右键单击空白处,选择检查-网络,显示界面如下:
在请求标头中获取 cookie和 user-agent
同时还需要获取 Fakeid 和 token
fakeid:是公众号独一无二的一个id
token:是自己的公众号独有的id
以上已经获取到了电脑端需要的4个重要参数:
Cookies、user-Agent 、fakeid 、token
爬取点赞数和阅读数:
在之前查找公众号的文章时,可以在相应信息中查找到文章的相关信息:
观察这些信息,可以在信息中找到公众号的文章标题,文章对应的链接
将文章链接复制到浏览器中,可以看到对应的公众号文章:
得到文章的链接之后,需要从链接中找到pass_ticket 、 appmsg_tojen 、 cookies 、user-Agent 、key。
通过fiddler抓包,得到这些参数
打开fiddler,选择过滤器
设置以下参数,点击action,设定只抓取关于微信公众相关的包
之后进入自己的微信客户端-选择公众号-查看历史信息-点开公众号的文章。
这时可以看到fiddler中出现一系列的包,依次点击抓取的包,在inspectors中查看以下信息,获取 pc微信端cookie 和user-agent
切换点击界面,可以看到如下信息:
可以从上面的界面中找到需要保存的参数:
更换公众号爬虫只需要更换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/
转载文章受原作者版权保护。转载请注明原作者出处!