学习scrapy写的一个小爬虫
数据都放在了sqlite数据库,方便分享,整个数据库大小2.1GB。
在GitHub我 release 了完整的sqlite数据库文件
爬取花了几十小时,因为爬快了会封禁IP,并且我也没使用代理池。并发数设置为3基本上可以一直爬。
爬虫从topic_id = 1
开始爬,路径为https://www.v2ex.com/t/{topic_id}
。 服务器可能返回404/403/302/200,如果是404说明帖子被删除了,如果是403说明是爬虫被限制了,302一般是跳转到登陆页面,有的也是跳转到主页,200返回正常页面。
爬虫没有登陆,所以爬取的数据不完全,比如水下火热的帖子就没有爬到,还有就是如果是302的帖子会记录帖子id,404/403不会记录。
爬取过程中会帖子内容,评论,以及评论的用户信息。
数据库表结构:表结构源码
注1:爬了一半才发现V站帖子附言没有爬,附言从topic_id = 448936
才会爬取
注2:select count(*) from member 得到的用户数比较小,大概20W,是因为爬取过程中是根据评论,以及发帖信息爬取用户的,如果一个用户注册之后既没有评论也没有发帖,那么这个账号就爬不到。还有就是因为部分帖子访问不了,也可能导致部分账号没有爬。还有部分用户号被删除,这一部分也没有爬。(代码改了,可以爬,但是都已经爬完了……)
注3:时间均为UTC+0的秒数
注4:数据库除了主键,和唯一索引,没有加其他索引。
确保python >=3.10
pip install -r requirements.txt
默认的并发数设置成了1,如需更改修改CONCURRENT_REQUESTS
更改 v2ex_scrapy/settings.py
中 PROXIES
的值 如
[
"http://127.0.0.1:7890"
]
请求会随机选择一个代理,如果需要更高级的代理方式可以使用第三方库,或者自行实现Middleware
默认关闭了写入Log文件的功能,如需开启修改v2ex_scrapy\settings.py
中的这行# LOG_FILE = "v2ex_scrapy.log"
配置文件,取消注释
scrapy crawl v2ex
scrapy: command not found
说明没有添加python包的安装位置到环境变量
直接运行爬取的命令即可,会自动继续爬。
原理就是查询数据库中最大的topic_id,然后从topic_id开始爬。
scrapy crawl v2ex
爬取过程中出现403基本上是因为IP被限制了,等待一段时间即可
代码更新后不能继续用我之前的数据库爬了。表结构改了,topic_content爬取的内容改为完整的HTML而不是只有文本内容。
统计用的SQL在query.sql这个文件下,图表的源码在analysis.py
第一次的分析见 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 | 次数 |
---|---|
开发 | 16414 |
App | 13240 |
Python | 13016 |
Mac | 12931 |
Java | 10984 |
Pro | 9375 |
iOS | 9216 |
微信 | 8922 |
V2EX | 8426 |
域名 | 8424 |