该仓库用于存放豆瓣魂组镜像数据的采集代码。如果您只是需要对应数据,请移步存储数据的仓库。
豆瓣魂组镜像数据的相关仓库皆采用GPL-3.0协议。若您要使用相关仓库的数据与代码,请确保您在后续也将有使用这些仓库的数据与代码的项目进行相关部分的开源。
本文档最后更新于2022年1月30日。该版本的文档与代码很大程度上基于开发者未能改版完成的枝江存档姬。
在此感谢 @screenl 在枝江存档姬的 issue 中提供的移动端API代码。这一块代码能够根据帖子的id获取帖子的主题帖内容与对应的回复,它对于本项目的帮助极大。
接下来是关于该仓库的详细使用说明。
豆瓣魂组镜像数据主要使用Python进行数据采集,并且使用sqlite数据库进行数据的存储。因此——
· 请确保您的环境使用的Python版本大于3.7,并且安装了以下包:
pip install sqlalchemy==2.0.0b1
pip install aiohttp
· 请确保您的环境支持sqlite-DB-API。
由于开发者 @Wendaolee 并不会移动端的抓包,因此采取的是一个很粗糙的步骤收集数据:
- 使用普通的Web爬虫爬取网页,解析网页,获取帖子的Tid后存储在数据库中。这一块代码见
./GetTopics
。 - 根据从前一步获取的tid数据,使用移动端API获取对应帖子的数据后存储在数据库中,这一块代码见
./GetTopicsData
因此,采集的数据可能出现的问题有:
- 网页爬虫是根据
https://www.douban.com/group/a-soul/discussion?start=
该网址进行爬取解析的,通过更改start
这一url查询参数逐页解析获取内容。但由于豆瓣自身存在的问题,以及可能一些在后面的帖子会被回复上浮,因而会存在重复获取与少数帖子丢失数据的问题。重复获取已通过SQL后期处理剔除解决,少数帖子丢失数据的问题依然可能存在。不过考虑到如今豆瓣魂组如同停尸房一般,可认为该部分丢失数据能控制在1%以内。
不过我在撰写这个文档的时候突然想到好像移动端的帖子api应该与网页端类似,只需要改对应api链接即可。等我后面有空再测试一下。
- 部分帖子由于发帖用户销号或者其他原因无法被访问,因此对应的主题帖以及其回复数据无法获取。
- 由于代码是边爬边写的,故而在一些报错中止程序运行后重启可能会遗漏部分帖子的数据。不过我认为这部分应该不超过50帖。
这些是若您要使用这些代码时您在使用过程中需要注意的问题。
总结,即您若要使用当前版本的代码做魂组数据的镜像采集,请遵循以下步骤:
- 使用
./GetTopics/get_tid_from_web.py
,获取名为tid_data.db
的sqlite数据库。 - 将该数据库移至
./GetTopicsData
,而后运行~/get_topics_comments_data.py
获取回复数据。 - 运行
~/get_topics_content_data.py
获取主题帖数据。
获取主题帖数据与获取回复数据建议分开运行,因为两者共用同一个日志管理模块,都输出到当前目录下的log.log
,为了方便您排查,建议不要同时运行。
如果您想要贡献相关代码,提交PR并且附上相关说明即可。
不过我们建议您先打开一个 issue 说明相关内容之后,再开始您的工作。如此可避免发生内容重复等问题的发生。