# weibo **Repository Path**: hngcadmin/weibo ## Basic Information - **Project Name**: weibo - **Description**: python爬虫,微博评论 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-06 - **Last Updated**: 2026-04-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 微博话题评论抓取系统 这个项目现在按 `SQLite` 本地运行来说明,不再展开 `MySQL`。目标是完成这条链路: 1. 页面输入微博话题、搜索方式和时间范围。 2. 点击按钮创建抓取任务。 3. 后端按时间窗口搜索微博。 4. 进入微博详情页,优先监听评论接口返回的 JSON。 5. 评论数据写入本地 SQLite。 6. 页面展示任务状态和抓到的评论。 7. 支持导出 CSV。 ## 你需要先知道的事 你需要一个能正常登录微博的账号。 你不需要自己手工复制 Cookie。项目已经提供了登录脚本: 1. 运行登录脚本。 2. 程序会自动打开浏览器。 3. 你在浏览器里手动登录微博。 4. 登录成功后,回到终端按回车。 5. 程序会把登录态保存到本地文件。 6. 后续抓取任务自动复用这个登录态。 ## 目录说明 几个关键文件: - [app/main.py](/Users/ljd/PycharmProjects/11/app/main.py) - [app/crawler.py](/Users/ljd/PycharmProjects/11/app/crawler.py) - [app/database.py](/Users/ljd/PycharmProjects/11/app/database.py) - [app/db_models.py](/Users/ljd/PycharmProjects/11/app/db_models.py) - [app/repository.py](/Users/ljd/PycharmProjects/11/app/repository.py) - [app/browser_login.py](/Users/ljd/PycharmProjects/11/app/browser_login.py) - [app/templates/index.html](/Users/ljd/PycharmProjects/11/app/templates/index.html) ## 默认数据文件 本项目默认使用 SQLite,本地数据库文件在: ```text app/data/weibo.db ``` 微博登录态文件默认在: ```text app/data/weibo_storage_state.json ``` 调试截图和调试 HTML 默认在: ```text app/data/debug/ ``` ## macOS 安装和启动 ### 1. 进入项目目录 ```bash cd /Users/ljd/PycharmProjects/11 ``` ### 2. 创建虚拟环境 ```bash python3 -m venv .venv ``` ### 3. 激活虚拟环境 ```bash source .venv/bin/activate ``` 激活成功后,终端前面通常会出现 `(.venv)`。 ### 4. 升级 pip ```bash python -m pip install --upgrade pip ``` ### 5. 安装依赖 ```bash pip install -r requirements.txt ``` 如果安装 `playwright` 时因为网络超时报错,可以重试: ```bash pip install --default-timeout 1000 --resume-retries 20 playwright==1.54.0 ``` 如果网络到官方源不稳定,可以换清华镜像: ```bash pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --default-timeout 1000 --resume-retries 20 -r requirements.txt ``` ### 6. 安装 Playwright 浏览器 ```bash playwright install chromium ``` ### 7. 保存微博登录态 ```bash python -m app.browser_login ``` 运行后会自动打开浏览器。你需要: 1. 在浏览器里手动登录微博。 2. 确认已经进入微博已登录页面。 3. 回到终端按回车。 保存成功后,登录态会写到: ```text app/data/weibo_storage_state.json ``` ### 8. 启动项目 ```bash uvicorn app.main:app --reload ``` ### 9. 打开页面 浏览器访问: ```text http://127.0.0.1:8000 ``` ## Windows 安装和启动 下面以 `PowerShell` 为例。 ### 1. 打开 PowerShell,进入项目目录 ```powershell cd C:\Users\你的用户名\PycharmProjects\11 ``` 如果你的项目不在这个目录,就换成你自己的实际路径。 ### 2. 创建虚拟环境 ```powershell py -3 -m venv .venv ``` 如果你的机器没有 `py`,也可以尝试: ```powershell python -m venv .venv ``` ### 3. 激活虚拟环境 ```powershell .venv\Scripts\Activate.ps1 ``` 如果 PowerShell 提示脚本执行受限,可以先执行: ```powershell Set-ExecutionPolicy -Scope CurrentUser RemoteSigned ``` 执行后重新打开 PowerShell,再激活虚拟环境。 ### 4. 升级 pip ```powershell python -m pip install --upgrade pip ``` ### 5. 安装依赖 ```powershell pip install -r requirements.txt ``` 如果下载 `playwright` 超时,可以重试: ```powershell pip install --default-timeout 1000 --resume-retries 20 playwright==1.54.0 ``` 如果网络不稳定,可以改用镜像: ```powershell pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --default-timeout 1000 --resume-retries 20 -r requirements.txt ``` ### 6. 安装 Playwright 浏览器 ```powershell playwright install chromium ``` ### 7. 保存微博登录态 ```powershell python -m app.browser_login ``` 运行后会自动打开浏览器。你需要在浏览器里手动登录微博,登录完成后回到终端按回车。 Windows 下这个脚本现在会优先尝试调用本机已安装的 `Microsoft Edge`,其次才是 `Chrome`,最后才回退到 Playwright 自带 Chromium。 如果你朋友在 Windows 上看到“跳到微博登录/注册页后空白、没有登录方式”,优先检查: 1. 电脑里是否安装了 Edge 或 Chrome 2. 是否在公司网络、远程桌面、受限代理环境下运行 3. 是否被浏览器插件、安全软件或系统策略拦截 建议优先用本机 Edge 重新执行: ```powershell python -m app.browser_login ``` 如果浏览器窗口打开后仍然空白,可以手动在地址栏输入: ```text https://weibo.com/ ``` 或者: ```text https://passport.weibo.com/visitor/visitor?a=enter&domain=.weibo.com&entry=miniblog&url=https%3A%2F%2Fweibo.com%2F ``` 只要最终能进入已登录的微博页面,再回终端按回车保存登录态即可。 ### 8. 启动项目 ```powershell uvicorn app.main:app --reload ``` ### 9. 打开页面 浏览器访问: ```text http://127.0.0.1:8000 ``` ## 页面里怎么填写 第一次测试,建议小范围跑。 推荐先这样填: - 微博话题:`上班` - 搜索方式:如果你输入的是普通词,选 `按关键词搜索` - 开始日期:先选 1 天范围,比如 `2026-04-01` - 结束日期:`2026-04-02` - 搜索窗口天数:`1` - 每窗口微博数:`10` - 每条微博评论上限:`20` 说明: - `按 #话题# 搜索` 适合明确的话题标签,比如 `清明节` - `按关键词搜索` 适合普通词,比如 `上班`、`通勤`、`加班` 不要一开始就直接跑几个月。 先把 1 天的小任务跑通,再逐步扩大。 ## 运行后你会看到什么 页面会展示: - 任务状态 - 已发现微博数 - 已入库评论数 - 已保存接口响应数 - 评论列表 如果任务完成,你还可以: - 点击 `查看` 查看该任务评论 - 点击 `CSV` 导出该任务结果 ## 这个系统是怎么抓评论的 流程不是“直接调用一个公开接口拿全量评论”,而是: 1. 打开微博搜索页。 2. 按 `#话题#` 或 `关键词` 加时间窗口搜索微博。 3. 拿到微博详情页链接。 4. 打开微博详情页。 5. 监听页面加载评论时发出的网络请求。 6. 从这些网络请求里解析 JSON。 7. 将评论写入 SQLite。 8. 如果接口没抓到,再尝试从页面 DOM 兜底抽取。 所以能真正抓到数据的前提是: - 你已经成功登录微博 - 登录态没有过期 - 当前微博页面结构没有完全变化 - 当前账号没有被风控拦截 - 你的关键词和时间范围内确实有内容 ## 常见问题 ### 1. 安装依赖时报 `playwright` 下载超时 这不是代码问题,是网络下载超时。 先执行: ```bash pip install --default-timeout 1000 --resume-retries 20 playwright==1.54.0 ``` 或者: ```bash pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --default-timeout 1000 --resume-retries 20 -r requirements.txt ``` ### 2. 任务执行完成,但一条数据都没有 先看页面上的三个数字: - 已发现微博数 - 已入库评论数 - 已保存接口响应数 如果这三个都是 `0`,通常说明连微博搜索结果都没拿到。优先检查: 1. 你输入的是不是普通词,如果是,搜索方式要选 `按关键词搜索` 2. 登录态是否已过期 3. 是否碰到了微博验证页 4. 搜索页结构是否变化 这时可以看调试文件夹: - [app/data/debug](/Users/ljd/PycharmProjects/11/app/data/debug) 里面会保存搜索页或详情页的调试截图和 HTML。 ### 3. 任务失败,提示缺少登录态文件 重新执行: ```bash python -m app.browser_login ``` ### 4. 之前能跑,后来突然抓不到 常见原因: - 登录态过期 - 微博页面改版 - 账号被限流或验证 优先重新登录,再重试一个小范围任务。 ### 5. Windows 上登录页空白 这更像是“微博登录页和自动化浏览器的兼容/风控问题”,不属于评论抓取逻辑本身的问题。 目前项目已经调整为: - Windows 优先调用系统 Edge - 其次尝试 Chrome - 最后才使用 Playwright 自带 Chromium 如果仍然空白,优先让对方确认: 1. 本机 Edge 能否直接正常打开微博 2. 是否处于被限制的网络环境 3. 是否被安全软件、杀毒软件、浏览器策略拦截 ### 6. Windows 上点击抓取后立即失败,报 `NotImplementedError` 如果错误栈里包含: ```text asyncio.create_subprocess_exec ... NotImplementedError ``` 这不是微博数据问题,而是 Windows 下事件循环策略不兼容,导致 Playwright 无法启动浏览器子进程。 当前代码已经内置修复。如果你拉的是旧版本,请先更新: ```powershell git pull ``` 然后重启服务: ```powershell uvicorn app.main:app --reload ``` ## 最短操作清单 如果你只想看最短版本: ### macOS 1. `cd /Users/ljd/PycharmProjects/11` 2. `python3 -m venv .venv` 3. `source .venv/bin/activate` 4. `pip install -r requirements.txt` 5. `playwright install chromium` 6. `python -m app.browser_login` 7. 在浏览器里手动登录微博 8. 回终端按回车 9. `uvicorn app.main:app --reload` 10. 打开 `http://127.0.0.1:8000` 11. 普通词用 `按关键词搜索` 12. 先跑 1 天的小任务 ### Windows 1. `cd C:\Users\你的用户名\PycharmProjects\11` 2. `py -3 -m venv .venv` 3. `.venv\Scripts\Activate.ps1` 4. `pip install -r requirements.txt` 5. `playwright install chromium` 6. `python -m app.browser_login` 7. 在浏览器里手动登录微博 8. 回终端按回车 9. `uvicorn app.main:app --reload` 10. 打开 `http://127.0.0.1:8000` 11. 普通词用 `按关键词搜索` 12. 先跑 1 天的小任务 ## 当前版本的边界 项目已经具备: - 页面录入参数 - 后台异步任务 - SQLite 存储 - 页面展示评论 - CSV 导出 但它还不是完全免维护的微博爬虫。 微博是高变动站点,后续仍然可能需要调整: - 搜索页选择器 - 评论按钮选择器 - 评论接口关键词 - 评论 JSON 结构 - 中文时间解析逻辑 这些代码主要在: - [app/crawler.py](/Users/ljd/PycharmProjects/11/app/crawler.py) 如果你接下来再次运行后仍然没有数据,把页面状态、报错信息,或者 [app/data/debug](/Users/ljd/PycharmProjects/11/app/data/debug) 里的文件名发给我,我可以继续帮你定位。