- 🌍 广泛的平台支持 — 覆盖国内外 17+ 主流社交媒体平台
- 🧹 链接清理 — 自动提取分享文案中的链接,并清除可移除的跟踪参数
- 🎬 多媒体解析 — 支持视频, 图文, 动图, 实况照片和富文本文章
- 📦 同步 / 异步 API — 同时提供
async/await与*_sync调用方式 - 🐚 CLI 支持 — 命令行原生支持,轻量开箱即用
- 🤖 Telegram Bot — 基于本项目的 Bot 已上线 → @ParseHuBot
| 平台 | 视频 | 图文 | 其他 |
|---|---|---|---|
| Twitter / X | ✅ | ✅ | |
| ✅ | ✅ | ||
| YouTube | ✅ | 🎵 音乐 | |
| ✅ | |||
| Threads | ✅ | ✅ | |
| Bilibili | ✅ | 📝 动态 | |
| 抖音 | ✅ | ✅ | |
| TikTok | ✅ | ✅ | |
| 微博 | ✅ | ✅ | |
| 小红书 | ✅ | ✅ | |
| 贴吧 | ✅ | ✅ | |
| 微信公众号 | ✅ | ||
| 快手 | ✅ | ||
| 酷安 | ✅ | ||
| 皮皮虾 | ✅ | ✅ | |
| 最右 | ✅ | ✅ | |
| 小黑盒 | ✅ | ✅ |
pipx install "parsehub[cli]"
ph -v# uv
uv add parsehub
# pip
pip install parsehub
# 需要完整 CLI 能力时,可安装 `cli` 扩展
uv add "parsehub[cli]"
pip install "parsehub[cli]"parsehub "https://example.com/post/1"
# 短命令等价写法
ph "https://example.com/post/1"ph d "https://example.com/post/1"| 命令 | 说明 |
|---|---|
ph ls |
查看支持的平台 |
ph set proxy <platform> <proxy> |
设置解析代理和下载代理 |
ph set proxy <platform> <proxy> --for download |
只设置下载代理 |
ph set cookie <platform> |
保存平台 Cookie |
ph set list |
查看配置列表 |
ph set show <platform> |
查看平台配置 |
配置会自动按平台应用到后续解析和下载; 临时覆盖时仍可直接传参数:
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"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 / proxy, 下载入口使用 parse_cookie / parse_proxy 作为解析阶段参数
当前支持 Cookie 的平台:
Twitter / XInstagramYouTubeBilibili抖音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 支持多种格式:
# 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"},
)unit 值:
bytes: 单文件下载时的字节进度count: 多文件下载时的文件数量进度
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}")- Evil0ctal/Douyin_TikTok_Download_API
- yt-dlp/yt-dlp
- instaloader/instaloader
- SocialSisterYi/bilibili-API-collect
- Nemo2011/bilibili-api
本项目基于 MIT License 开源。
如果这个项目对你有帮助,欢迎点个 ⭐ Star!