中文 | English
一个爬取v2ex.com网站的爬虫
学习scrapy写的一个小爬虫
数据都放在了sqlite数据库,方便分享,整个数据库大小3.7GB。
在GitHub我 release 了完整的sqlite数据库文件
数据库更新:2023-07-22-full
包含全部帖子数据(水深火热在内),同时帖子和评论的内容不再只爬取文本内容,而是爬取原始的HTML,同时topic增加了单独的reply_count,comment增加了no
不建议自行运行爬虫,数据已经有了
爬取花了几十小时,因为爬快了会封禁IP,并且我也没使用代理池。并发数设置为3基本上可以一直爬。
爬取相关数据说明
爬虫从topic_id = 1
开始爬,路径为https://www.v2ex.com/t/{topic_id}
。 服务器可能返回404/403/302/200,如果是404说明帖子被删除了,如果是403说明是爬虫被限制了,302一般是跳转到登陆页面,有的也是跳转到主页,200返回正常页面。
爬取过程中会帖子内容,评论,以及评论的用户信息。
数据库表结构:表结构源码
运行
确保python >=3.10
安装依赖
pip install -r requirements.txt
配置
默认的并发数设置成了1,如需更改修改CONCURRENT_REQUESTS
Cookie
部分帖子和部分帖子信息需要登录才能爬取,可以设置Cookie来登录,修改 v2ex_scrapy/settings.py
中 COOKIES
的值
COOKIES = """
a=b;c=d;e=f
"""
代理
更改 v2ex_scrapy/settings.py
中 PROXIES
的值 如
[
"http://127.0.0.1:7890"
]
请求会随机选择一个代理,如果需要更高级的代理方式可以使用第三方库,或者自行实现Middleware
LOG
默认关闭了写入Log文件的功能,如需开启修改v2ex_scrapy\settings.py
中的这行# LOG_FILE = "v2ex_scrapy.log"
配置文件,取消注释
运行爬虫
爬取全站帖子、用户信息和评论
scrapy crawl v2ex
爬取指定节点帖子、用户信息和评论,如果node-name为空则爬flamewar
scrapy crawl v2ex-node node=${node-name}
爬取用户信息,从uid=1开始爬到uid=635000
scrapy crawl v2ex-member start_id=${start_id} end_id=${end_id}
scrapy: command not found
说明没有添加python包的安装位置到环境变量
接着上次爬
直接运行爬取的命令即可,会自动继续爬。会自动跳过已经爬过的帖子
scrapy crawl v2ex
注意事项
爬取过程中出现403基本上是因为IP被限制了,等待一段时间即可
统计分析
统计用的SQL在query.sql这个文件下,图表的源码在analysis这个子项目下,包含一个分析数据导出到JSON的Python脚本和一个前端展示项目
第一次的分析见 https://www.v2ex.com/t/954480
水深火热见https://oldshensheep.github.io/v2ex_scrapy
帖子、评论和用户数量统计
帖子总数:801,038 (80万)
评论总数:10,899,382 (1000万)
用户总数:194,534 (20万)异常原因见爬取相关数据说明的注2
获得感谢最多的评论
因为部分评论内容较多不方便展示,要查看内容可以点击链接。或者下载数据库使用SQL查询,SQL查询文件也包含在开源文件中
正向投票最多的帖子
帖子链接 | 标题 | 票数 |
---|---|---|
https://www.v2ex.com/t/110327 | UP n DOWN vote in V2EX | 321 |
https://www.v2ex.com/t/295433 | Snipaste - 开发了三年的截图工具,但不只是截图 | 274 |
https://www.v2ex.com/t/462641 | 在 D 版发过了,不过因为不少朋友看不到 D 版,我就放在这里吧,说说我最近做的这个 Project | 200 |
https://www.v2ex.com/t/658387 | 剽窃别人成果的人一直有,不过今天遇到了格外厉害的 | 179 |
https://www.v2ex.com/t/745030 | QQ 正在尝试读取你的浏览记录 | 177 |
https://www.v2ex.com/t/689296 | 早上还在睡觉,自如管家进了我卧室... | 145 |
https://www.v2ex.com/t/814025 | 分享一张我精心修改调整的 M42 猎户座大星云(Orion Nebula)壁纸。用了非常多年,首次分享出来,能和 MBP 2021 新屏幕和谐相处。 | 136 |
https://www.v2ex.com/t/511827 | 23 岁,得了癌症,人生无望 | 129 |
https://www.v2ex.com/t/427796 | 隔壁组的小兵集体情愿 要炒了 team leader | 123 |
https://www.v2ex.com/t/534800 | 使用 Github 账号登录 黑客派 之后, Github 自动 follow | 112 |
点击次数最多的帖子
帖子链接 | 标题 | 点击数 |
---|---|---|
https://www.v2ex.com/t/510849 | chrome 签到插件 [魂签] 更新啦 | 39,452,510 |
https://www.v2ex.com/t/706595 | 迫于搬家 ··· 继续出 700 本书~ 四折 非技术书还剩 270 多本· | 2,406,584 |
https://www.v2ex.com/t/718092 | 使用 GitHub 的流量数据为仓库创建访问数和克隆数的徽章 | 1,928,267 |
https://www.v2ex.com/t/861832 | 帮朋友推销下福建古田水蜜桃,欢迎各位购买啊 | 635,832 |
https://www.v2ex.com/t/176916 | 王垠这是在想不开吗 | 329,617 |
https://www.v2ex.com/t/303889 | 关于 V2EX 提供的 Android Captive Portal Server 地址的更新 | 295,681 |
https://www.v2ex.com/t/206766 | 如何找到一些有趣的 telegram 群组? | 294,553 |
https://www.v2ex.com/t/265474 | ngrok 客户端和服务端如何不验证证书 | 271,244 |
https://www.v2ex.com/t/308080 | Element UI——一套基于 Vue 2.0 的桌面端组件库 | 221,099 |
https://www.v2ex.com/t/295433 | Snipaste - 开发了三年的截图工具,但不只是截图 | 210,675 |
发送评论最多的用户
用户 | 评论数 |
---|---|
Livid | 19559 |
loading | 19190 |
murmur | 17189 |
msg7086 | 16768 |
Tink | 15919 |
imn1 | 11468 |
20015jjw | 10293 |
x86 | 9704 |
opengps | 9694 |
est | 9532 |
发送帖子最多的用户
用户 | 主题数 |
---|---|
Livid | 6974 |
icedx | 722 |
ccming | 646 |
2232588429 | 614 |
razios | 611 |
coolair | 604 |
Kai | 599 |
est | 571 |
Newyorkcity | 553 |
WildCat | 544 |
曲线
需要详细的数据,建议下载数据库
每月新用户数折线图
每月新帖子数折线图
评论数折线图
使用次数最多的节点
节点 | 次数 |
---|---|
qna | 188011 |
all4all | 103254 |
programmer | 51706 |
jobs | 49959 |
share | 35942 |
apple | 20713 |
macos | 19040 |
create | 18685 |
python | 14124 |
career | 13170 |
使用次数最多的tag (tag为v2ex自动生成)
tag | 次数 |
---|---|
开发 | 16414 |
App | 13240 |
Python | 13016 |
Mac | 12931 |
Java | 10984 |
Pro | 9375 |
iOS | 9216 |
微信 | 8922 |
V2EX | 8426 |
域名 | 8424 |