跳到主要内容
ParseHub · prolist
返回项目库查看仓库原始简介 轻量、异步、开箱即用的社交媒体聚合解析库
项目解读 README
项目解读由 AI 根据历史资料整理,尚未经人工复核。仓库资料更新于 2026-09-08,与历史解读分开保留。
项目概览 ParseHub 是一款由开发者梓澪(z-mio)于 2024 年 11 月开源的社交媒体聚合解析库与 CLI 工具,使用 Python 编写,采用 MIT 协议。它通过统一的 parse() 和 download() 接口,支持 17+ 国内外主流社交媒体平台的链接解析与媒体下载,覆盖视频、图文、实况照片等多种内容类型。其核心设计是“一个接口,17+ 平台,零配置即用”,用户无需预处理链接,工具可自动从分享文案中提取 URL、清理跟踪参数并识别目标平台。ParseHub 底层聚合了 yt-dlp、instaloader 等成熟项目,并针对国内特有平台自行实现解析逻辑。它提供 CLI、Python API(同步/异步)和 Telegram Bot 三种使用方式,支持按平台配置 Cookie 和代理,并原生支持 async/await,适合批量处理场景。
解决什么问题 ParseHub 主要解决多平台社交媒体内容获取的碎片化问题。在它出现之前,开发者和内容消费者面临多个痛点:每个平台都有自己的 URL 格式、API 接口、数据结构和反爬策略,个人或小团队需要维护十几套独立的解析脚本,开发和维护成本极高。社交媒体的分享链接往往包含冗余的跟踪参数、短链重定向,甚至混合了分享文案和实际 URL,用户需要手动提取真正的链接,过程麻烦且容易出错。不同平台的内容格式差异巨大,包括纯视频、图文合集、实况照片、动图、富文本文章和音乐,解析器需要识别内容类型并正确处理不同的下载策略。此外,很多平台需要登录态才能获取完整数据或更高清资源,不同平台对 Cookie 的格式要求不同,管理登录态成为额外负担。现有工具如 yt-dlp 主要专注视频,对图文合集和社交媒体帖子的结构化解析支持有限;instaloader 专注 Instagram;gallery-dl 专注图片,没有一个工具能同时覆盖国内外社交媒体的视频和图文。大多数爬虫工具是同步的,在批量解析多个平台链接时效率低下。
工作方式 ParseHub 的核心工作流程是策略模式与工厂模式的组合。用户输入链接或分享文案后,链接清理模块使用 urlextract 库自动提取 URL,处理混合分享文案的文本、清理跟踪参数,并在需要时解析短链接重定向。平台识别器根据 URL 的域名和路径模式匹配预定义的域名映射表,识别目标平台。随后工厂模式选择对应的 Parser 实现,每个平台的 Parser 继承自统一的基类,定义了 parse() 和 download() 接口,并支持传入 cookie 和 proxy 参数。媒体下载引擎支持多种策略:视频文件调用 yt-dlp,Instagram 调用 instaloader,图文合集使用 httpx 异步客户端自行实现 HTTP 下载,实况照片特殊处理同时下载静态图和短视频。解析结果统一为 ParseResult 结构,包含媒体信息、媒体文件列表、下载状态和本地路径,可选导出 metadata.json。项目底层聚合了 yt-dlp、instaloader、bilibili-api 等成熟项目的成果,对于国内特有平台(抖音、小红书、微博等)自行实现解析逻辑。
核心能力
统一 API:parse() 和 download() 两个方法覆盖所有平台
支持 17+ 国内外主流社交媒体平台
自动从分享文案中提取 URL 并清理跟踪参数
原生异步支持,适合批量处理
支持视频、图文、实况照片、音频等多种内容类型
按平台隔离的 Cookie 和代理配置管理
提供 CLI、Python API 和 Telegram Bot 三种使用方式
下载进度回调支持
轻量无浏览器依赖
使用前需要了解
AI 整理 · 本地测试,未经人工复核;依据历史报告节选,不代表当前产品状态。
ParseHub 是单链接级别的快速解析工具,不是爬虫框架,不支持搜索、翻页、评论采集等大规模数据采集能力。部分平台(如 X、Instagram、B站、抖音、小红书等)需要配置 Cookie 才能获取完整数据或更高清资源。项目要求 Python 3.12 及以上版本。不支持 Pinterest、Reddit 等平台,海外平台覆盖与 gallery-dl 相比仍有差距。没有 Web UI,只能通过 CLI 或 Python API 使用。项目较新(2024 年 11 月创建),社区规模较小,文档不够丰富,单作者主导,bus factor 低。底层依赖 yt-dlp 和 instaloader,如果上游项目出问题或平台更新反爬策略,可能需要等待上游修复。不建议用于大规模商业数据采集,应遵守各平台服务条款和版权法,下载内容仅供个人学习和研究使用。
简体中文 · 官方 原文
✨ 特性
🌍 广泛的平台支持 — 覆盖国内外 17+ 主流社交媒体平台
🧹 链接清理 — 自动提取分享文案中的链接,并清除可移除的跟踪参数
🎬 多媒体解析 — 支持视频, 图文, 动图, 实况照片和富文本文章
📦 同步 / 异步 API — 同时提供 async/await 与 *_sync 调用方式
🐚 CLI 支持 — 命令行原生支持,轻量开箱即用
🤖 Telegram Bot — 基于本项目的 Bot 已上线 → @ParseHuBot
🌐 支持平台
📦 安装
CLI 安装 uv tool install "parsehub[cli]"
ph -v
Python 库安装 # uv
uv add parsehub
# 需要完整 CLI 能力时,可安装 `cli` 扩展
uv add "parsehub[cli]"
🚀 快速开始
CLI
解析链接或分享文案 parsehub "https://example.com/post/1"
# 短命令等价写法
ph "https://example.com/post/1"
下载媒体 ph d "https://example.com/post/1"
常用命令 配置会自动按平台应用到后续解析和下载; 临时覆盖时仍可直接传参数:
ph "https://example.com/post/1" --proxy http://127.0.0.1:7890
ph d "https://example.com/post/1" --parse-proxy http://127.0.0.1:7890 --cookie "key=value"
Python API
同步解析 from parsehub import ParseHub
ph = ParseHub()
result = ph.parse_sync("https://www.xiaoheihe.cn/app/bbs/link/174972336")
print(result)
dr = result.download_sync()
print(dr)
异步解析 import asyncio
from parsehub import ParseHub
async def main():
ph = ParseHub()
result = await ph.parse("https://tieba.baidu.com/p/9939510114")
print(result)
dr = await result.download()
print(dr)
asyncio.run(main())
下载媒体 from parsehub import ParseHub
ph = ParseHub()
result = ph.download_sync("https://www.xiaoheihe.cn/app/bbs/link/174972336")
print(result)
🔑 高级用法
Cookie 登录与代理 需要登录态的平台可传 Cookie, 解析入口使用 cookie / proxy, 下载入口使用 parse_cookie / parse_proxy 作为解析阶段参数
Twitter / X
Instagram
Threads
YouTube
Bilibili
抖音
TikTok
快手
小红书
知乎
豆瓣
from parsehub import ParseHub
ph = ParseHub()
result = ph.parse_sync(
"https://example.com",
cookie="key1=value1; key2=value2",
proxy="http://127.0.0.1:7890",
)
# Cookie header 字符串
ph.parse_sync("https://example.com", cookie="key1=value1; key2=value2")
# JSON 字符串
ph.parse_sync("https://example.com", cookie='{"key1": "value1", "key2": "value2"}')
# 字典
ph.parse_sync("https://example.com", cookie={"key1": "value1", "key2": "value2"})
下载进度回调 from parsehub import ParseHub
from parsehub.types import ProgressUnit
class ProgressTracker:
async def __call__(self, current: int, total: int, unit: ProgressUnit, *args, task_name: str = "", **kwargs):
print(f"[{task_name}] {current}/{total} ({unit})")
result = ParseHub().download_sync(
"https://example.com",
path="./downloads",
callback=ProgressTracker(),
callback_args=("extra_arg",),
callback_kwargs={"task_name": "demo"},
)
bytes: 单文件下载时的字节进度
count: 多文件下载时的文件数量进度
保存 metadata.json from parsehub import ParseHub
result = ParseHub().download_sync(
"https://example.com",
path="./downloads",
save_metadata=True,
)
print(result.output_dir / "metadata.json")
全局配置 from pathlib import Path
from parsehub.config import GlobalConfig
GlobalConfig.default_save_dir = Path("./downloads")
错误处理 from parsehub import ParseHub
from parsehub.errors import ParseError, UnknownPlatform
try:
result = ParseHub().parse_sync("https://example.com")
except UnknownPlatform:
print("暂不支持该平台")
except ParseError as exc:
print(f"解析失败: {exc}")
启用日志 from loguru import logger
logger.enable('parsehub')
🤝 参与贡献 欢迎提交 Pull Request 或 Issue!
开发规范 ruff format && ruff check --fix && uv run mypy
uv run pytest
🤝 参考项目
📜 开源协议