Python脚本-微信公众号文章抓取工具 提示词

程序员辉哥|阅读 1
2026/01/21 11:54
微信公众号数据抓取python抓取数据公众号转markdown提示词

功能说明

该工具用于抓取微信公众号文章内容,并将其转换为Markdown格式,同时自动下载文章中的图片到本地。

主要功能

  1. 文章内容抓取:从微信公众号链接中提取文章标题、公众号名称、作者、发布时间和正文内容
  2. 图片下载:自动下载文章中的所有图片到本地,并替换Markdown中的图片链接,并且图片无水印
  3. 格式转换:将HTML格式的文章内容转换为Markdown格式
  4. 关键词提取:自动从文章内容中提取关键词(最多5个,每个关键词最多10个字)
  5. 元数据保存:保存文章的元数据信息(标题、公众号名称、作者、发布时间、关键词等)
  6. API模式:支持JSON模式输出,供API调用使用

使用方法

基本用法

python scripts/information/fetch_wechat_article.py <微信公众号文章链接>

指定输出目录

python scripts/information/fetch_wechat_article.py <微信公众号文章链接> <输出目录>

JSON模式(API调用)

python scripts/information/fetch_wechat_article.py <微信公众号文章链接> [输出目录] --json

JSON模式会输出标准JSON格式的响应,包含完整的文章数据和图片信息,适合API调用使用。

示例

# 使用默认输出目录(data/wechat_articles)python scripts/information/fetch_wechat_article.py https://mp.weixin.qq.com/s/z_hmNFWK4vgZUPaa95-qqA # 指定自定义输出目录python scripts/information/fetch_wechat_article.py https://mp.weixin.qq.com/s/z_hmNFWK4vgZUPaa95-qqA ./my_articles # JSON模式(用于API调用)python scripts/information/fetch_wechat_article.py https://mp.weixin.qq.com/s/z_hmNFWK4vgZUPaa95-qqA --json # JSON模式 + 指定输出目录python scripts/information/fetch_wechat_article.py https://mp.weixin.qq.com/s/z_hmNFWK4vgZUPaa95-qqA ./my_articles --json

输出结构

脚本会在输出目录下创建以文章标题命名的文件夹,包含以下文件:

data/wechat_articles/  └── 文章标题/      ├── 文章标题.md          # Markdown格式的文章内容      ├── metadata.json        # 文章元数据(JSON格式)      └── images/              # 文章中的图片          ├── 001_image.jpg          ├── 002_图片描述.png          └── ...

输出文件说明

Markdown文件(.md)

包含完整的文章内容,格式为Markdown:

  • 文章标题(H1)
  • 元信息(作者、发布时间)
  • 正文内容(已转换为Markdown格式)
  • 图片链接(已替换为本地相对路径)

元数据文件(metadata.json)

包含文章的元数据信息:

{  "title": "文章标题",  "author": "作者名称",  "account_name": "公众号名称",  "publish_time": "发布时间",  "url": "原始文章链接",  "images_count": 5,  "keywords": ["关键词1", "关键词2", "关键词3"],  "download_time": "2025-01-XX XX:XX:XX"}

字段说明

  • title: 文章标题
  • author: 作者名称(已去除重复单词)
  • account_name: 公众号名称
  • publish_time: 发布时间
  • url: 原始文章链接
  • images_count: 图片数量
  • keywords: 关键词列表(最多5个,每个关键词最多10个字)
  • download_time: 下载时间

图片目录(images/)

包含文章中的所有图片,文件名格式为:

  • 001_图片描述.jpg(如果有alt文本)
  • 001_image.jpg(如果没有alt文本)

依赖要求

脚本依赖以下Python包(已在 requirements.txt 中):

  • requests - HTTP请求
  • beautifulsoup4 - HTML解析
  • chardet - 字符编码检测
  • jieba - 中文分词和关键词提取(可选,未安装时使用简单方法)

注意jieba 是可选的。如果未安装,脚本会使用简单的词频统计方法提取关键词,但效果可能不如使用 jieba

注意事项

  1. 访问限制:某些微信公众号文章可能需要登录或验证才能访问,脚本可能无法抓取
  2. 图片下载:如果图片下载失败,Markdown中会保留原始图片URL
  3. 文件名清理:文章标题中的非法字符会被替换为下划线,以确保文件名有效
  4. 请求频率:脚本在下载图片时会自动添加延迟(0.5秒),避免请求过快

JSON模式(API调用)

当使用 --json 参数时,脚本会输出标准JSON格式的响应,适合API调用使用。

成功响应格式

{  "status": 200,  "message": "文章抓取成功",  "data": {    "success": true,    "title": "文章标题",    "author": "作者名称",    "account_name": "公众号名称",    "publish_time": "发布时间",    "url": "原始文章链接",    "content_markdown": "Markdown格式的正文内容(不包含标题和元信息)",    "content_html": "原始HTML内容",    "keywords": ["关键词1", "关键词2", "关键词3"],    "images": [      {        "url": "图片URL",        "alt": "图片描述",        "original_tag": "原始img标签"      }    ],    "images_count": 5,    "images_dir": "图片保存目录路径",    "image_filename_map": {      "图片URL": "本地文件名"    },    "cache_dir": "缓存目录路径"  }}

错误响应格式

{  "status": 500,  "message": "文章抓取失败",  "data": {    "error": "错误信息",    "success": false  }}

注意:JSON模式下,图片仍会下载到本地缓存目录,同时返回图片目录路径和文件名映射,方便API后续处理。

错误处理

  • 如果文章抓取失败,脚本会输出错误信息并退出(JSON模式下输出错误JSON)
  • 如果某个图片下载失败,会继续处理其他图片,并在Markdown中保留原始URL
  • HTML转Markdown失败时,会回退到纯文本提取
  • 如果创建目录失败(文件名包含非法字符),会使用MD5哈希值作为目录名

技术实现

  • 使用 requests 库发送HTTP请求,模拟浏览器访问
  • 使用 BeautifulSoup 解析HTML内容
  • 支持微信公众号文章的多种HTML结构
  • 自动处理图片懒加载(data-src属性)
  • 智能提取文章标题、公众号名称、作者和发布时间
  • 使用 jieba(可选)进行中文分词和关键词提取,支持TF-IDF算法
  • 自动去除作者名称中的重复单词
  • 支持多种编码格式(UTF-8、GBK等)的自动检测
  • 图片下载时自动识别文件类型(jpg、png、gif、webp等)
  • 文件名清理:自动移除非法字符,确保跨平台兼容性