Skip to main content

WeChat MP article parser - extract metadata and content from WeChat public account articles

Project description

wechat-article-parser

微信公众号文章解析器。传入一个公众号文章链接,自动抓取页面并提取公众号信息、文章元数据及正文的 Markdown 内容。

支持的文章类型:

  • 标准富文本文章
  • 转载式文章
  • 纯文本文章
  • 视频分享类文章
  • 小红书风格图片轮播文章
  • 全屏布局短文本文章

安装

pip install wechat-article-parser

本地开发安装:

git clone https://github.com/huanjuedadehen/wechat-article-parser.git
cd wechat-article-parser
pip install -e ".[dev]"

依赖项(会自动安装):

  • Python >= 3.10
  • httpx
  • beautifulsoup4
  • markdownify

使用方式

同步调用

from wechat_article_parser import parse

result = parse("https://mp.weixin.qq.com/s/xxxxx")
print(result.article_title)
print(result.article_markdown)

异步调用

from wechat_article_parser import parse_async

result = await parse_async("https://mp.weixin.qq.com/s/xxxxx")
print(result.article_title)
print(result.article_markdown)

可选参数

两个方法都支持以下可选参数:

  • timeout:请求超时时间,单位秒,默认 15
  • user_agent:自定义 User-Agent,不传则使用内置默认值
result = parse(
    "https://mp.weixin.qq.com/s/xxxxx",
    timeout=30,
    user_agent="MyBot/1.0",
)

返回结构

parseparse_async 均返回 ArticleResult 数据类,包含以下字段:

字段 类型 说明
mp_id_b64 str 公众号 ID(Base64 编码原始值)
mp_id int 公众号 ID(解码后的整数)
mp_name str 公众号名称
mp_alias str 公众号别名
mp_image str 公众号头像链接
mp_description str 公众号简介
article_id str 文章 ID
article_msg_id int 文章所在的群发消息 ID
article_idx int 群发图文中的位置(从 1 开始)
article_sn str 文章签名(防伪校验)
article_title str 文章标题
article_cover_image str 文章封面图链接
article_description str 文章摘要
article_markdown str 文章正文的 Markdown 内容
article_publish_time int 发布时间(Unix 时间戳)
images list[str] 文章中提取的所有图片链接
is_valid bool 关键字段是否全部解析成功(属性)

is_validTrue 的条件:mp_idmp_namearticle_idarticle_msg_idarticle_idxarticle_snarticle_titlearticle_markdownarticle_publish_time 均不为空/零。

异常处理

WeChatVerifyError

当请求频率过高或 IP 被限流时,微信会返回验证码页面而非文章内容。此时会抛出 WeChatVerifyError

from wechat_article_parser import parse, WeChatVerifyError

try:
    result = parse("https://mp.weixin.qq.com/s/xxxxx")
except WeChatVerifyError:
    print("触发了微信人机验证,请稍后重试或更换 IP")

httpx.HTTPStatusError

当 HTTP 请求返回非 2xx 状态码时,会抛出 httpx.HTTPStatusError

import httpx
from wechat_article_parser import parse

try:
    result = parse("https://mp.weixin.qq.com/s/xxxxx")
except httpx.HTTPStatusError as e:
    print(f"请求失败: {e.response.status_code}")

解析不完整

部分文章类型可能无法提取所有字段(如某些文章没有封面图或摘要)。这种情况不会抛出异常,但 result.is_valid 会返回 False。建议在业务逻辑中检查:

result = parse("https://mp.weixin.qq.com/s/xxxxx")
if not result.is_valid:
    print("部分关键字段未能解析")

测试

安装开发依赖:

pip install -e ".[dev]"

运行全部测试

pytest tests/test_parser.py -v -s

只运行同步 / 异步测试

pytest tests/test_parser.py -v -s -k "sync"
pytest tests/test_parser.py -v -s -k "async"

测试单个链接 - 查看所有字段

pytest tests/test_parser.py::test_fetch_all -s --url "https://mp.weixin.qq.com/s/xxxxx"

测试单个链接 - 只看 Markdown 内容

pytest tests/test_parser.py::test_fetch_markdown -s --url "https://mp.weixin.qq.com/s/xxxxx"

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

wechat_article_parser-0.0.2.tar.gz (9.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

wechat_article_parser-0.0.2-py3-none-any.whl (9.6 kB view details)

Uploaded Python 3

File details

Details for the file wechat_article_parser-0.0.2.tar.gz.

File metadata

  • Download URL: wechat_article_parser-0.0.2.tar.gz
  • Upload date:
  • Size: 9.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.2

File hashes

Hashes for wechat_article_parser-0.0.2.tar.gz
Algorithm Hash digest
SHA256 62979b47d45960ee410398b933ac9ca3949a77c7dd587c0b412e3f57714e7745
MD5 d3479bc7a31ff406c3c7bcebffbb801c
BLAKE2b-256 fc015b882e62ff3befc25f10d30db99df17ec19c1fc72b6828a883ce6570b765

See more details on using hashes here.

File details

Details for the file wechat_article_parser-0.0.2-py3-none-any.whl.

File metadata

File hashes

Hashes for wechat_article_parser-0.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 8c9d0388faec62a7b4a2b1be8650685675e7b3a6ba9fa3bca4acc749f43718b3
MD5 e625a661651aa13d03c349481047659d
BLAKE2b-256 d4045fc3230918eb3d5261f0ec584d0e14d5b522aaf4068fc9a7abcb9b3289e9

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page