Skip to content

Repository files navigation

微博公开内容爬虫(无需登录专业版)

一款专门用于爬取微博用户公开原创内容的爬虫工具,完全无需登录,功能强大稳定。

项目仓库:https://github.com/lonelydancer88/PersonalAgent

✨ 功能特性

✅ 完全无需登录:直接爬取公开可见内容,无需扫码/账号
✅ 长微博全文抓取:自动识别并展开"全文"按钮,获取完整内容
✅ 完美断点续爬:任何中断(手动停止/崩溃/关机)后可继续,100%不重复爬取
✅ 后台静默运行:默认无头模式,浏览器无窗口,不占用桌面资源
✅ 多用户支持:支持命令行指定任意用户ID爬取
✅ 自动目录管理:按"用户名_用户ID+时间戳"生成独立目录,永不覆盖历史数据,直观识别用户
✅ 批量存储:每N条存一个文件,避免单文件过大,默认每1000条一批
✅ 智能过滤:自动过滤转发内容、空内容、重复内容,仅保留原创微博
✅ 双日志输出:实时进度同时输出到控制台和文件,后台运行也能随时查看历史进度
✅ 智能自动退出:连续多次无新增内容或滚动到底部自动停止,无需人工值守
✅ 重复内容验证:支持打印重复ID示例,确认爬取准确性

📋 运行要求

  • Python 3.8+
  • 依赖安装:
    pip install playwright
    playwright install chromium

🚀 使用方法

1. 普通爬取(默认用户,后台运行)

python crawl_final_pro.py

默认爬取用户ID为 2704548745 的公开微博,浏览器后台静默运行。


2. 爬取指定用户

python crawl_final_pro.py --uid 123456

替换123456为你要爬取的微博用户ID,例如爬雷军:

python crawl_final_pro.py --uid 2014433131

用户ID获取方式:打开微博用户主页,URL中/u/后面的数字就是用户ID


3. 前台调试模式(可见浏览器窗口)

python crawl_final_pro.py --uid 123456 --headless 0

浏览器窗口可见,用于调试、查看爬取过程。


4. 断点续爬(中断后继续)

python crawl_final_pro.py --resume ./data/weibos_雷军_2014433131_20260420_163045

指定上次运行的输出目录,自动加载历史进度,跳过已爬取内容,继续爬取。


5. 自定义参数示例

# 每500条存一个批次,连续3次无新增自动停止,每爬20条输出一次进度
python crawl_final_pro.py --uid 123456 --batch_size 500 --max_empty_scroll 3 --log_interval 20

# 开启重复ID示例打印,验证爬取准确性
python crawl_final_pro.py --uid 123456 --show_duplicate_samples

🔧 完整参数说明

参数 类型 默认值 说明
--uid 字符串 2704548745 要爬取的微博用户ID
--resume 字符串 空 断点续爬:指定上次运行的输出目录路径
--headless 整数 1 是否后台运行:1=后台无头,0=前台可见
--batch_size 整数 1000 每批存储条数,默认1000条存一个文件
--max_empty_scroll 整数 5 连续多少次滚动无新增内容自动停止,默认5次
--log_interval 整数 10 每爬N条输出一次进度日志,默认10条
--show_duplicate_samples 布尔开关 关闭 是否打印重复ID示例,用于验证爬取正确性

📂 输出目录结构

每个爬取任务会生成独立目录,新版格式为 data/weibos_{用户名}_{用户ID}_{时间戳},自动清理用户名中的特殊字符,直观易识别:

weibos_雷军_2014433131_20260420_163045/
├── user_info.json          # 爬取用户的基本信息(昵称、简介等)
├── weibos_all.json         # 所有爬取到的原创微博完整汇总
├── weibos_batch_001.json   # 批次存储文件,每1000条一个
├── weibos_batch_002.json
├── ...
├── crawled_ids.txt         # 已爬取的微博ID记录,用于断点续爬
├── crawl.log               # 完整运行日志,包含所有操作和错误信息
└── crawl_complete.json     # 爬取完成标记(仅全部完成后生成)

旧版格式weibos_{用户ID}_{时间戳}也兼容断点续爬

单条微博字段说明

{
  "id": "微博ID",
  "content": "微博完整内容",
  "publish_time": "发布时间",
  "crawl_time": "爬取时间",
  "url": "微博详情页链接",
  "is_full_text": "是否是全文抓取(true=有全文按钮,已展开)"
}

🛠️ 配套辅助工具

1. 内容提取工具:extract_content.py

提取爬取结果中的纯文本内容,每条微博一行,可直接用于数据分析:

# 默认处理最新爬取结果
python extract_content.py

# 自定义输入输出路径
python extract_content.py --input ./data/weibos_xxx/weibos_all.json --output ./output.txt

2. 调试工具

  • debug_missing.py:对比当前页面卡片和爬取结果,排查是否有遗漏内容
  • debug_scroll.py:调试滚动加载问题,验证是否有新内容
  • debug_why_few.py:分析爬取数量少的原因

❓ 常见问题

Q:为什么爬取的内容很少?

A:未登录状态下微博平台限制只能查看用户最近的部分公开内容,这是平台本身的反爬限制,属于正常现象。如果需要爬取全部内容,可以登录后使用登录版爬虫。

Q:为什么重复条数远大于新增条数?

A:微博移动端滚动加载特性,每次滚动会返回大量已经展示过的旧内容,仅末尾少量新内容,属于平台正常设计,不是爬虫bug。

Q:中断后怎么继续爬取?

A:运行时加上 --resume 参数指定上次的输出目录即可,会自动跳过已爬取的内容,接着之前的进度继续。

Q:怎么爬多个用户?

A:多次运行命令,每次指定不同的 --uid 参数即可,每个用户会生成独立的目录,互不影响。

Q:后台运行时怎么查看进度?

A:直接打开输出目录下的 crawl.log 文件,里面有完整的实时进度记录,也可以查看 weibos_all.json 文件看已爬取的内容。

Q:为什么有的微博内容不全?

A:未登录状态下部分长微博即使点击全文也无法查看完整内容,属于平台限制。

⚠️ 注意事项

  1. 本工具仅用于学习交流和个人使用,请勿用于商业用途
  2. 爬取时请遵守网站的robots.txt协议和相关法律法规
  3. 请勿短时间内频繁爬取,避免给对方服务器造成压力,也避免被封IP
  4. 爬取的内容版权归原作者所有,请勿随意传播

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages