Python如何爬取微信公众号文章和评论(基于Fiddler抓包分析)
本文将介绍如何使用Python爬取微信公众号文章和评论。我们将使用Fiddler抓包工具来分析微信公众号的API接口,并使用Python的requests库来发送HTTP请求和解析响应数据。
1. Fiddler抓包分析
在开始爬取微信公众号文章和评论之前,我们需要先分析微信公众号的API接口。为了分析API接口,我们将使用Fiddler抓包工具。
1.1. 安装Fiddler
首先,我们需要安装Fiddler抓包工具。Fiddler是一款免费的抓包工具,可以用于分析HTTP请求和响应数据。可以从Fiddler官网下载最新版本的Fiddler。
1.2. 配置Fiddler
安装完成后,我们需要配置Fiddler以便于抓取微信公众号的API接口。具体步骤如下:
- 启动Fiddler,并在菜单栏中选择
Tools
->Options
。 - 在
HTTPS
选项卡中,勾选Decrypt HTTPS traffic
选项,并点击Actions
按钮,选择Trust Root Certificate
。 - 在
Connections
选项卡中,勾选Allow remote computers to connect
选项,并记录下Fiddler listens on port
的端口号。 - 点击
OK
按钮保存配置。
1.3. 抓包分析
配置完成后,我们可以开始抓包分析微信公众号的API接口。具体步骤如下:
- 在Fiddler中点击
Start Capture
按钮开始抓包。 - 在微信客户端中打开要爬取的公众号,并选择一篇文章。
- 在Fiddler中找到微信客户端发送的HTTP请求,并查看请求的URL和参数。
- 在Fiddler中找到微信客户端接收的HTTP响应,并查看响应的数据。
通过抓包分析,我们可以获取到微信公众号的API接口和响应数据,从而可以使用Python来爬取微信公众号文章和评论。
2. 爬取微信公众号文章
在本节中,我们将介绍如何使用Python爬取微信公众号文章。我们将使用Python的requests库来发送HTTP请求,并使用正则表达式来解析响应数据。
2.1. 发送HTTP请求
首先,我们需要发送HTTP请求来获取微信公众号的文章列表。我们可以使用requests库来发送HTTP请求。具体代码如下:
import requests
url = 'https://mp.weixin.qq.com/mp/profile_ext?action=getmsg&__biz=MzI5MjEzNjUwMA==&f=json&offset=0&count=10&is_ok=1&scene=124&uin=777&key=777&pass_ticket=777&wxtoken=&appmsg_token=1111&x5=0&f=json'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36',
'Referer': 'https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=MzI5MjEzNjUwMA==&scene=124&devicetype=Windows+10&version=62060833&lang=zh_CN&nettype=WIFI&a8scene=3&fontScale=100&pass_ticket=777&wx_header=1',
'Cookie': 'cookie'
}
response = requests.get(url, headers=headers)
在上面的代码中,我们使用requests库发送了一个GET请求,并设置了请求的URL、请求头和Cookie。其中,URL中的参数包括:
__biz
:公众号的唯一标识符。offset
:文章列表的偏移量。count
:每次请求返回的文章数量。is_ok
:是否成功获取文章列表。scene
:场景值。uin
:用户ID。key
:加密密钥。pass_ticket
:通行证。appmsg_token
:文章令牌。x5
:是否使用X5内核。
2.2. 解析响应数据
发送HTTP请求后,我们需要解析响应数据来获取文章列表。我们可以使用正则表达式来解析响应数据。具体代码如下:
import re
pattern = re.compile(r'"app_msg_list":(.*?),"err_msg"')
result = pattern.search(response.text)
if result:
data = result.group(1)
articles = eval(data)
for article in articles:
title = article['title']
url = article['link']
print(title, url)
在上面的代码中,我们使用正则表达式来匹配响应数据中的文章列表,并使用eval函数将匹配到的数据转换为Python对象。然后,我们遍历文章列表,获取每篇文章的标题和URL,并输出到控制台。
3. 爬取微信公众号评论
在本节中,我们将介绍如何使用Python爬取微信公众号文章的评论。我们将使用Python的requests库来发送HTTP请求,并使用json库来解析响应数据。
3.1. 发送HTTP请求
首先,我们需要发送HTTP请求来获取微信公众号文章的评论。我们可以使用requests库来发送HTTP请求。具体代码如下:
import requests
url = 'https://mp.weixin.qq.com/mp/appmsg_comment?action=getcomment&__biz=MzI5MjEzNjUwMA==&appmsgid=100000240&idx=1&comment_id=0&offset=0&limit=100&uin=777&key=777&pass_ticket=777&wxtoken=&devicetype=Windows+10&clientversion=62060833&appmsg_token=1111'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36',
'Referer': 'https://mp.weixin.qq.com/s?__biz=MzI5MjEzNjUwMA==&mid=100000240&idx=1&sn=777&chksm=6c78f7b55b0f7ea3f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7&scene=21&ascene=0&devicetype=Windows+10&version=62060833&nettype=WIFI&abtest_cookie=BAABAAoACwASABMABAAjlx4AVpkeAMSZHgDmZHgDmJ4A&lang=zh_CN&fontScale=100&pass_ticket=777&wx_header=1',
'Cookie': 'cookie'
}
response = requests.get(url, headers=headers)
在上面的代码中,我们使用requests库发送了一个GET请求,并设置了请求的URL、请求头和Cookie。其中,URL中的参数包括:
__biz
:公众号的唯一标识符。appmsgid
:文章的ID。idx
:文章的序号。comment_id
:评论的ID。offset
:评论列表的偏移量。limit
:每次请求返回的评论数量。uin
:用户ID。key
:加密密钥。pass_ticket
:通行证。appmsg_token
:文章令牌。
3.2. 解析响应数据
发送HTTP请求后,我们需要解析响应数据来获取文章的评论。我们可以使用json库来解析响应数据。具体代码如下:
import json
data = json.loads(response.text)
comments = data['elected_comment_total_cnt']
for comment in data['elected_comment']:
content = comment['content']
print(content)
在上面的代码中,我们使用json库来将响应数据转换为Python对象。然后,我们遍历评论列表,获取每条评论的内容,并输出到控制台。
4. 示例
以下是两个爬取微信公众号文章和评论的示例:
4.1. 示例1
爬取微信公众号文章列表:
import requests
import re
url = 'https://mp.weixin.qq.com/mp/profile_ext?action=getmsg&__biz=MzI5MjEzNjUwMA==&f=json&offset=0&count=10&is_ok=1&scene=124&uin=777&key=777&pass_ticket=777&wxtoken=&appmsg_token=1111&x5=0&f=json'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36',
'Referer': 'https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=MzI5MjEzNjUwMA==&scene=124&devicetype=Windows+10&version=62060833&lang=zh_CN&nettype=WIFI&a8scene=3&fontScale=100&pass_ticket=777&wx_header=1',
'Cookie': 'cookie'
}
response = requests.get(url, headers=headers)
pattern = re.compile(r'"app_msg_list":(.*?),"err_msg"')
result = pattern.search(response.text)
if result:
data = result.group(1)
articles = eval(data)
for article in articles:
title = article['title']
url = article['link']
print(title, url)
在上面的代码中,我们使用requests库发送了一个GET请求,并使用正则表达式解析响应数据,获取文章列表,并输出到控制台。
4.2. 示例2
爬取微信公众号文章的评论:
import requests
import json
url = 'https://mp.weixin.qq.com/mp/appmsg_comment?action=getcomment&__biz=MzI5MjEzNjUwMA==&appmsgid=100000240&idx=1&comment_id=0&offset=0&limit=100&uin=777&key=777&pass_ticket=777&wxtoken=&devicetype=Windows+10&clientversion=62060833&appmsg_token=1111'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36',
'Referer': 'https://mp.weixin.qq.com/s?__biz=MzI5MjEzNjUwMA==&mid=100000240&idx=1&sn=777&chksm=6c78f7b55b0f7ea3f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7&scene=21&ascene=0&devicetype=Windows+10&version=62060833&nettype=WIFI&abtest_cookie=BAABAAoACwASABMABAAjlx4AVpkeAMSZHgDmZHgDmJ4A&lang=zh_CN&fontScale=100&pass_ticket=777&wx_header=1',
'Cookie': 'cookie'
}
response = requests.get(url, headers=headers)
data = json.loads(response.text)
comments = data['elected_comment_total_cnt']
for comment in data['elected_comment']:
content = comment['content']
print(content)
在上面的代码中,我们使用requests库发送了一个GET请求,并使用json库解析响应数据,获取文章的评论,并输出到控制台。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python如何爬取微信公众号文章和评论(基于 Fiddler 抓包分析) - Python技术站