该程序可以搜索 Snapchat 的公开 Snap Map 在多个地点并下载所有故事,以便后续调查和 分类。关于 Snapchat 如何决定哪些视频出现在地图上的哪个“点”,目前尚不清楚,因此爬取器还可以将爬取的地理位置随机化几百米,以期让 API 提供更多相关视频。
已在 Linux 上测试过,但应该也能在 Windows/Mac 上运行(需安装视频播放器)。
git clone https://github.com/nemec/snapchat-map-scraper.git
cd snapchat-map-scraper/
python3 -m venv env # 创建虚拟环境
source env/bin/activate # 激活虚拟环境
pip3 install -r requirements.txt
请按顺序执行每一步。另外,请确保已激活虚拟环境,否则会缺少所需包。
该数据库保存与一组搜索查询相关的数据。由于 SQLite 生成的数据库文件开销很小,建议每次采样数据时都创建一个新的数据库。
python3 story_downloader.py create snap.db
add 命令会向数据库中添加一个新地点。程序后续会从所有已添加的地点爬取并记录 snaps,以便一次跟踪多个地点。找到你感兴趣的地点的纬度和经度(如下所示,可以从 Snap Map 上轻松获取),然后替换到下面的命令中。标签有助于记住某个地点的位置。
python3 story_downloader.py add --database snap.db --label "达拉斯市中心" 32.783038 -96.796388
# 已将达拉斯市中心添加到数据库

scrape 命令会遍历所有已添加的地点,并下载该地点的 snaps。预览、视频和叠加层都会被下载,但 review 命令目前只能处理视频。
可选参数:
--randomize 会将地理坐标在 500 米范围内随机化,目的是提示 Snapchat 的 API 提供尚未下发的新视频。我不清楚为什么 Snapchat 对于单个地点只发送总视频的一部分,可能是为了让服务更具可扩展性。--repeat 会让应用程序无限循环,持续寻找新视频。让它整夜运行,以收集尽可能多的视频。--sleep 会修改应用程序在重复之前的休眠时间。默认为 120 秒,且仅在包含 --repeat 时生效。python3 story_downloader.py scrape "达拉斯市中心"python3 story_downloader.py scrape --database snap.db --randomize --repeat
# 从地点达拉斯市中心爬取了 16 个媒体
# 休眠 120 秒...
review 命令会遍历所有未审查的视频,并用视频播放器逐一打开供审查。关闭视频播放器进程后,CLI 会提示你输入“分类”。这可以是描述视频情景的任何文本或标签等。如果视频无关紧要,保持分类为空并直接按“Enter”键。当所有剩余视频分类完成后,应用程序会退出。根据你的操作系统,
python3 story_downloader.py review --database snap.db
# 分类或留空:警察抗议者
# 剩余 15 个
# 分类或留空:
# 剩余 14 个
# 分类或留空:火灾
# 剩余 13 个
# ...
export 命令会将所有已“分类”的视频复制到一个新文件夹中,以便进一步审查/编辑/发布。
python3 story_downloader.py export --database snap.db export/
# 已导出 3 个视频
ls export/
# 2020-05-29-04:26:30-火灾.mp4
# 2020-05-30-12:26:57-人群.mp4
# '2020-05-30-21:16:22-排队长龙.mp4'