本程序会从 Bilibili、百度贴吧、Reddit、YouTube 抓取真实评论,然后做清洗、分词、情感分析、关键词提取、主题分类,最后生成 pyecharts 图表和结论。
从远程仓库克隆:
git clone https://github.com/silunuo/PythonWarCrawler.git
cd PythonWarCrawler如果你用 SSH:
git clone git@github.com:silunuo/PythonWarCrawler.git
cd PythonWarCrawler建议使用 Python 3.10。依赖安装到项目目录里的 .venv,pip 缓存放到 .pip-cache。
python -m venv .venv
$env:PIP_CACHE_DIR = (Join-Path (Get-Location) '.pip-cache')如果需要代理,安装依赖前先设置(根据你的客户端设置而定):
$env:HTTP_PROXY = 'http://127.0.0.1:7890'
$env:HTTPS_PROXY = 'http://127.0.0.1:7890'安装依赖:
.\.venv\Scripts\python -m pip install -r requirements.txtpython3 -m venv .venv
export PIP_CACHE_DIR="$PWD/.pip-cache"如果需要代理:
export HTTP_PROXY="http://127.0.0.1:7890"
export HTTPS_PROXY="http://127.0.0.1:7890"安装依赖:
.venv/bin/python -m pip install -r requirements.txt主要改 config.json。
| 字段 | 说明 |
|---|---|
proxy.enabled |
是否使用代理 |
proxy.http / proxy.https |
代理地址,默认是 127.0.0.1:7890 |
date_range.enabled |
是否按日期范围过滤,默认开启 |
date_range.start_date |
默认开始日期,当前是 2026-02-28 |
date_range.end_date |
默认结束日期,null 表示当天 |
crawl.target_total |
正式抓取目标数量,默认 3000 |
crawl.queries_cn |
中文关键词,用于 Bilibili 和贴吧 |
crawl.queries_en |
英文关键词,用于 Reddit 和 YouTube |
crawl.tieba_forums |
贴吧列表 |
paths.raw_comments |
原始 CSV 输出路径 |
paths.clean_comments |
分析后 CSV 输出路径 |
paths.dashboard_html |
图表页面输出路径 |
不用代理时,把 proxy.enabled 改成 false:
"proxy": {
"enabled": false,
"http": "http://127.0.0.1:7890",
"https": "http://127.0.0.1:7890"
}先跑少量数据,确认三个平台都能访问:
Windows:
.\.venv\Scripts\python main.py all --smokemacOS / Linux:
.venv/bin/python main.py all --smoke成功后会生成这些文件:
data/raw/comments.csv
data/processed/analyzed_comments.csv
output/summary.json
output/dashboard.html
output/conclusions.md
如果想指定日期范围:
.\.venv\Scripts\python main.py all --smoke --start-date 2026-02-28 --end-date 2026-05-26如果想临时关闭日期过滤:
.\.venv\Scripts\python main.py all --smoke --no-date-filter如果想看每一步结果,可以分步执行。
.\.venv\Scripts\python main.py crawl --smoke输出:
data/raw/comments.csv
.\.venv\Scripts\python main.py analyze输出:
data/processed/analyzed_comments.csv
output/summary.json
.\.venv\Scripts\python main.py visualize输出:
output/dashboard.html
output/conclusions.md
Windows:
.\.venv\Scripts\python main.py all --target-total 3000macOS / Linux:
.venv/bin/python main.py all --target-total 3000正式模式会检查有效评论数量。如果真实平台返回的数据少于 3000 条,程序会退出并提示实际数量。程序不会补假数据。
默认会按 config.json 里的日期范围过滤。当前默认是从 2026-02-28 到当天。
| 文件 | 怎么看 |
|---|---|
data/raw/comments.csv |
看原始评论,字段有平台、内容、时间、用户名、点赞数、链接、语言 |
data/processed/analyzed_comments.csv |
看 tokens、sentiment_score、sentiment、category |
output/dashboard.html |
用浏览器打开,看 pyecharts 图表 |
output/conclusions.md |
看自动生成的结论 |
output/summary.json |
看统计结果,主要给图表使用 |
运行完后检查:
-
.venv在项目目录里。 -
.pip-cache在项目目录里。 -
data/raw/comments.csv已生成。 -
data/processed/analyzed_comments.csv已生成。 -
output/dashboard.html已生成。 -
output/conclusions.md已生成。 -
comments.csv里有Bilibili、Tieba、Reddit、YouTube四个平台。 - 正式抓取时没有人为补数据。
可用下面命令检查依赖和语法:
.\.venv\Scripts\python -m pip check
.\.venv\Scripts\python -m compileall main.py src这是平台拦截请求。程序会重试,也会继续跑后面的关键词。可以稍后再跑,或者把 config.json 里的 request.delay_seconds 调大。
程序会跳过这个吧,继续抓其他贴吧。可以在 crawl.tieba_forums 里换别的相关贴吧。
程序会先用公开评论接口,失败后再用 Reddit JSON 接口。代理不稳定时,可以稍后再跑。
YouTube 评论依赖网页里的公开 continuation 数据。部分视频会关闭评论,或者网页返回的数据里没有评论入口,这种视频会被跳过。
先确认代理可用,再修改这些参数:
"bilibili": {
"search_pages": 8,
"comment_pages_per_video": 8
},
"tieba": {
"thread_pages_per_forum": 6,
"post_pages_per_thread": 6
},
"reddit": {
"pages_per_query": 8
},
"youtube": {
"search_pages": 2,
"videos_per_query": 8,
"comment_pages_per_video": 4
}页数越大,运行时间越长,被限流的概率也会变高。
.
├── main.py
├── config.json
├── requirements.txt
├── resources/
├── src/
│ ├── analysis/
│ ├── common/
│ ├── crawlers/
│ └── visualization/
├── data/
└── output/