Python爬取公众号文章并实现关键词分析

简介: Python爬取公众号文章并实现关键词分析
  1. 引言
    微信公众号是一个重要的内容分发平台,许多优质文章仅在该平台发布。然而,公众号的封闭性使得数据采集和分析变得困难。本文将介绍如何使用Python爬取微信公众号文章,并结合自然语言处理(NLP)技术进行关键词分析,帮助用户快速提取核心信息。
    1.1 技术栈
    ● 爬虫框架:requests + BeautifulSoup / mitmproxy(抓包)
    ● 数据处理:pandas
    ● 自然语言处理:jieba(中文分词) + wordcloud(词云生成)
    ● 存储:sqlite3(轻量级数据库)
    1.2 目标
  2. 爬取指定公众号的历史文章(标题、发布时间、阅读量、正文)。
  3. 对文章内容进行分词和关键词提取。
  4. 生成词云,直观展示高频关键词。
  5. 公众号爬取实现
    由于微信公众号的反爬机制较强,直接请求网页版可能无法获取数据。我们采用 Fiddler/mitmproxy 抓包 的方式获取真实接口数据。
    2.1 抓取公众号文章列表
    (1)使用 mitmproxy 获取接口数据
    微信公众号的“历史消息”页面(mp.weixin.qq.com)采用动态加载,可通过抓包工具(如 Fiddler、Charles、mitmproxy)获取真实 API。
    步骤:
  6. 在 PC 端微信打开目标公众号的历史文章页面。
  7. 使用 mitmproxy 监听请求,找到类似 https://mp.weixin.qq.com/mp/profile_ext 的接口。
  8. 分析返回的 JSON 数据,提取文章列表。
    (2)Python 代码实现
    假设我们已经获取到公众号文章的 API 接口,可以模拟请求获取数据:
    import requests
    import json
    from requests.auth import HTTPProxyAuth

代理配置

proxyHost = "www.16yun.cn"
proxyPort = "5445"
proxyUser = "16QMSOML"
proxyPass = "280651"

代理设置(HTTP/HTTPS)

proxies = {
"http": f"http://{proxyUser}:{proxyPass}@{proxyHost}:{proxyPort}",
"https": f"http://{proxyUser}:{proxyPass}@{proxyHost}:{proxyPort}"
}

请求头

headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36",
"Cookie": "你的Cookie" # 替换为你的微信Cookie
}

def get_article_list(offset=0):
url = "https://mp.weixin.qq.com/mp/profile_ext"
params = {
"action": "getmsg",
"__biz": "公众号的biz参数", # 替换为目标公众号的biz
"offset": offset,
"count": 10, # 每次请求的文章数量
}
try:

    # 使用代理发送请求
    resp = requests.get(
        url,
        params=params,
        headers=headers,
        proxies=proxies,
        timeout=10  # 设置超时时间
    )
    resp.raise_for_status()  # 检查请求是否成功
    data = resp.json()
    return data.get("general_msg_list", [])
except requests.exceptions.RequestException as e:
    print(f"请求失败: {e}")
    return []

测试爬取

articles = get_article_list()
print(json.dumps(articles, indent=2, ensure_ascii=False))
关键点:
● __biz:公众号的唯一标识,可在公众号主页 URL 中找到。
● Cookie:登录微信 PC 端后,从浏览器开发者工具复制。
2.2 解析文章详情
获取文章列表后,需要进一步爬取每篇文章的正文内容。
from bs4 import BeautifulSoup

def parse_article_detail(article_url):
resp = requests.get(articleurl, headers=headers)
soup = BeautifulSoup(resp.text, 'html.parser')
content = soup.find('div', class
='rich_media_content').get_text()
return content.strip()

示例:解析第一篇文章

first_article_url = articles[0]["app_msg_ext_info"]["content_url"]
article_content = parse_article_detail(first_article_url)
print(article_content[:200]) # 输出前200个字符

  1. 关键词分析
    3.1 使用 jieba 进行分词
    jieba 是 Python 中最常用的中文分词工具,支持自定义词典和停用词过滤。
    import jieba
    import jieba.analyse

加载停用词

stopwords = set()
with open("stopwords.txt", "r", encoding="utf-8") as f:
for line in f:
stopwords.add(line.strip())

分词 + 关键词提取

def extract_keywords(text, topK=10):
words = jieba.cut(text)
filtered_words = [word for word in words if word not in stopwords and len(word) > 1]
keywords = jieba.analyse.extract_tags(" ".join(filtered_words), topK=topK)
return keywords

keywords = extract_keywords(article_content)
print("Top 10 关键词:", keywords)
3.2 生成词云
使用 wordcloud 库可视化高频关键词:
from wordcloud import WordCloud
import matplotlib.pyplot as plt

def generate_wordcloud(text):
wc = WordCloud(
font_path="SimHei.ttf", # 中文字体
background_color="white",
max_words=50,
width=800,
height=600
)
wc.generate(text)
plt.imshow(wc, interpolation="bilinear")
plt.axis("off")
plt.show()

generate_wordcloud(" ".join(keywords))

  1. 数据存储(SQLite)
    将爬取的文章存储到数据库,方便后续分析:
    import sqlite3

conn = sqlite3.connect("wechat_articles.db")
cursor = conn.cursor()

创建表

cursor.execute("""
CREATE TABLE IF NOT EXISTS articles (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT,
publish_time TEXT,
read_count INTEGER,
content TEXT,
keywords TEXT
)
""")

插入数据

def save_article(title, publish_time, read_count, content, keywords):
cursor.execute("""
INSERT INTO articles (title, publish_time, read_count, content, keywords)
VALUES (?, ?, ?, ?, ?)
""", (title, publish_time, read_count, content, ",".join(keywords)))
conn.commit()

示例存储

save_article(
title="Python爬虫实战",
publish_time="2023-10-01",
read_count=5000,
content=article_content,
keywords=keywords
)

conn.close()

  1. 总结
    本文介绍了如何:
  2. 使用 mitmproxy 抓包获取公众号文章 API。
  3. 用 requests + BeautifulSoup 解析文章内容。
  4. 结合 jieba 和 wordcloud 进行关键词分析和可视化。
  5. 存储数据至 SQLite 数据库。
    扩展方向
    ● 反反爬优化:使用代理 IP、随机 User-Agent 提高稳定性。
    ● 自动化监控:定时爬取新文章并发送邮件/Telegram 通知。
    ● 情感分析:结合 NLP 模型(如 SnowNLP)分析文章情感倾向。
相关文章
|
4月前
|
存储 分布式计算 大数据
基于Python大数据的的电商用户行为分析系统
本系统基于Django、Scrapy与Hadoop技术,构建电商用户行为分析平台。通过爬取与处理海量用户数据,实现行为追踪、偏好分析与个性化推荐,助力企业提升营销精准度与用户体验,推动电商智能化发展。
|
4月前
|
机器学习/深度学习 大数据 关系型数据库
基于python大数据的台风灾害分析及预测系统
针对台风灾害预警滞后、精度不足等问题,本研究基于Python与大数据技术,构建多源数据融合的台风预测系统。利用机器学习提升路径与强度预测准确率,结合Django框架实现动态可视化与实时预警,为防灾决策提供科学支持,显著提高应急响应效率,具有重要社会经济价值。
|
4月前
|
机器学习/深度学习 大数据 关系型数据库
基于python大数据的青少年网络使用情况分析及预测系统
本研究基于Python大数据技术,构建青少年网络行为分析系统,旨在破解现有防沉迷模式下用户画像模糊、预警滞后等难题。通过整合多平台亿级数据,运用机器学习实现精准行为预测与实时干预,推动数字治理向“数据驱动”转型,为家庭、学校及政府提供科学决策支持,助力青少年健康上网。
|
5月前
|
JSON 缓存 供应链
电子元件 item_search - 按关键字搜索商品接口深度分析及 Python 实现
本文深入解析电子元件item_search接口的设计逻辑与Python实现,涵盖参数化筛选、技术指标匹配、供应链属性过滤及替代型号推荐等核心功能,助力高效精准的电子元器件搜索与采购决策。
|
5月前
|
缓存 供应链 芯片
电子元件类商品 item_get - 商品详情接口深度分析及 Python 实现
电子元件商品接口需精准返回型号参数、规格属性、认证及库存等专业数据,支持供应链管理与采购决策。本文详解其接口特性、数据结构与Python实现方案。
|
自然语言处理 Python
如何用Python提取中文关键词?
本文一步步为你演示,如何用Python从中文文本中提取关键词。如果你需要对长文“观其大略”,不妨尝试一下。 2017-12-07-20-38-22-7-426487.png 需求 好友最近对自然语言处理感兴趣,因为他打算利用自动化方法从长文本里提取关键词,来确定主题。
1780 0
|
5月前
|
数据采集 机器学习/深度学习 人工智能
Python:现代编程的首选语言
Python:现代编程的首选语言
400 102
|
5月前
|
数据采集 机器学习/深度学习 算法框架/工具
Python:现代编程的瑞士军刀
Python:现代编程的瑞士军刀
387 104

推荐镜像

更多