不知何时许萌生了一个念头,老想着做一个电影站,适合自己、朋友方便找一些经典或最新热门的电影。
像那些专业采集电影的程序,我却一点也看不上~!所以,第一步我先开始试着把豆瓣电影资料库给扒下来!
以下是收集豆瓣电影时,遇到一些问题:
Q: 为什么不使用 豆瓣 API ?
A: 我在翻阅 豆瓣 API 文档时,发现的问题:
1. 不需要授权公开api可以使用http,参数里面如果不包含apikey的话,限制单ip每分钟10次,带的话每分钟40次
(也就是说,每分钟仅能访问40次[实际测试,当我几分钟内访问几百次左右的时候,授权就禁止了] )
解决方法:可以尝试多申请些应用,获得更多的APIKEY,在多线程访问时,替换不同的APIKEY即可!
2. 豆瓣 API 内容较少,不适合我收集。例如:
通过 IMDb 来收集:https://api.douban.com/v2/movie/imdb/tt2017561
(你会发现内容会出奇的少,收集一次之后,会面临重复收集同一资料的补充性)
那么接下来,开始直接访问 豆瓣电影(http://movie.douban.com),首先是查看网站上的一系列链接以及分类等,再让我们开始下一轮的收集;
分类是以标签模式来获取电影列表的(如:电影类型、国家地区、导演演员以及上映年代等方式),那么通过什么方式才能以最快的速度获取到最多的资料而且重复性最少呢?!
无疑,答案是:国家或上映年代~首先,我选择了上映年代~!下面接着分析:
那么接下来,你会问:难道你要从第一部电影开始收集么?
科普一下,人类史上第一部电影是:郎德海花园场景,据说只有短短的2秒之久,1888年上映!
也就是说,我需要从标签:1888-2015 一直遍历过来么?当然,谁这么做,谁就2了~!
首先对于,很遥远的年代我会寻找出一个新标签,如: 1880s,1890s,1900s …
当然,这种方法适应较少的分页: http://movie.douban.com/tag/1900s
如果,到了,2010s:http://movie.douban.com/tag/2010s (你会发现,分页很多很多了)
估计,有细心的同学就会发现,点击 第100页,内容就突然消失了:http://movie.douban.com/tag/2010s?start=1980&type=T
接着,有经验的同学就会试着这样查询:http://movie.douban.com/tag/2010s?start=980&type=T
而,第51页,内容会接着消失了: http://movie.douban.com/tag/2010s?start=1000&type=T
有人可能以为只是个别现象,又接着试其他标签:http://movie.douban.com/tag/2000s?start=1000&type=T
啊哈,第51页又没了,第50页呢:http://movie.douban.com/tag/2000s?start=980&type=T
嗯,这时我们就可以下定论了,豆瓣的确做限制了,按照每页20条数据,20 * 50 = 1000 条数据
也就是说: LIMIT start , 1000
那么电影列表问题的解决方法:当 超过 51页内容时,可以试着按照 国家+年代 或者 电影类型+年代 这类细分方法继续放大精确电影列表;
电影列表问题解决之后,就可以采集电影内容了,当N线程访问时,你会发现用不了几分钟,就禁止访问(HTTP 403等)了!
后来,Google 之后,发现了问题是,豆瓣以为你是水军~ 屏蔽访问了,解决方法是:
Cookies 增加一个:bid=”aABbCcdD”,bid=”随机值”。即可解决屏蔽访问,可以是每访问一次换一个Cookies,或者多线程每个都有一个Cookies,并且在被禁止访问时替换一个Cookies,将失败地址重新读取一次,继续往下爬! |