Python-豆瓣电影爬虫
豆瓣电影爬虫[GitHub]
豆瓣电影数据库是目前高质量电影信息的聚集地。对于一些视频聚合应用、数据挖掘应用等场景,豆瓣电影数据库仍然是一个很好的选择。
首先在Github上找到一个豆瓣爬虫项目(唯一一个50star以上)的一个项目doubanspiders,然后进行改造。
该项目存在一些问题,并进行了完善:
- 模拟登陆已经失效(现在已经改成滑块,暂不实现,目前看来未登陆并不影响采集)
- 请求会导致重定向过多的问题(重新调整header)
- 缺少影评(只实现首页前5条评论)、上映日期、主图、简介不全(过长会隐藏,导致抓取不全)
- 缺少请求超时和重试机制
以下是 项目douban-movie 的设计思路
以下是 项目douban-movie 的设计思路
遍历方式介绍
本文涉及的遍历思路有两种:
- 根据id进行遍历
- 根据关键词种子,遍历搜索结果
根据id进行遍历
豆瓣电影信息的url格式为:https://movie.douban.com/subject/id。例如:https://movie.douban.com/subject/26683290/
豆瓣是从2005年创办的,2005年以前的电影信息id很可能是最早的id。
搜索1999,得到一个1998年的电影。https://movie.douban.com/subject/1303954/。 id编号是七位的数字:1303954。搜索2016,得到最新的电影。https://movie.douban.com/subject/26928204/。 id编号是八位的数字:26928204。 由此猜测,目前(2016年)豆瓣电影的id大致是1300000到27000000。
由于反爬虫的设计,id是不连续的。为了提高命中率,需要对id的分布规律进行分析。
根据关键词种子,遍历搜索结果
豆瓣电影提供了搜索接口。通过关键词搜索得到相关记录的链接。 比如按年份获取,关键词可为:2005,2006,....2016。 比如分分类获取,关键词可为:动作,冒险,爱情,记录...。
总结
需要较为完整的数据库信息,可采用id遍历。 抓取的目的性较强时,可以采用关键词抓取。
TODO:
- 豆瓣的URL设计是比较符合RESTful规范的。根据豆瓣的id即可抓取其他相关的资源
- 由于豆瓣的反爬虫机制,id是稀疏。可以考虑筛选一些没有内容的id以提高命中率。
- 由于豆瓣限制了每个IP允许抓取的访问次数,可以使用代理IPproxymesh来提升抓取速度
- 更新包依赖
影评:https://movie.douban.com/subject/26366465/reviews
图片:https://movie.douban.com/subject/26366465/all_photos
预告片:https://movie.douban.com/subject/26366465/trailer
使用说明
默认设置
- 测试用的账号密码
- 默认为csv方式存储,存储路径为程序当前路径
- 默认遍历方式为id遍历
- 安装依赖:
pip3 install -r requirements.txt
数据库设计
很明显,项目中的数据库设计是不符合数据库范式的。为了上手容易,一切从简。
法律义务
该爬虫仅为个人研究。如有商业用途请与豆瓣联系或参考相关法律约束。


浙公网安备 33010602011771号