2017年9月29日
最近接到了一个小任务,要求爬取豆瓣、时光网等网站的电影信息并进行少量的数据处理。爬电影确实不是一个难的东西,不就是选择一个相对简单的目标url,写一个脚本进行访问。但是,要想要为何不借此机会,好好研究一下python中的异步以及多线程机制呢?说不定还就写出一个像scrapy一样的爬虫框架了呢!
爬取豆瓣电影列表这件事,也不算什么复杂的工作,因为豆瓣电影本身没有反爬虫机制。
电影列表抓取
方案A
网址:https://movie.douban.com/tag/2017
里面有2017年的所有电影,但是其中有混杂很多的电视剧啥的,总数也仅仅只有4000个。
2017年9月30日
方案B
网址:https://movie.douban.com/typerank?type_name=剧情&type=11&interval_id=100:90&action=
倘若枚举每一个分类的每一个得分档次的每一页,就可以得到大约20000个电影。这可以说非常全面了。
2017年10月7日
电影信息抓取
豆瓣对于每一个电影都有一个自己的id,这个在之前爬取爬虫列表的部分就已经预处理出来了。
页面链接就是普通的电影页面:https://movie.douban.com/subject/26425068/
然而,当我尝试开始使用诸如多线程爬虫时……
豆瓣把我给封掉了……
现在可以确认的消息是
- 通过urllib.request.urlopen进行访问,单线程会在几千次左右被封
- 通过多线程访问可以在一分钟内被封
- 通过IP代理暂时没有看出效果
首先我尝试的是直接将爬取的数据写入数据库,但是感觉比较迷……因为容易被封IP,需要在八小时后自动重新启动。判重等问题非常难处理。
另一种尝试则是通过在ID对应文件中写入数据。网上的爬虫用的是第二种,但是感觉第一种可能会方便一些……吧……