利用爬虫绕过豆瓣限制抓取豆瓣电影信息
前两天看到国内一个电影评论,大概意思是说近些年的烂片的一些规律,比如主演,导演,年份等等,闲来不是很忙,就写了段代码,按照年份把豆瓣的电影信息全部抓取下来,然后回头自己统计看看。
思路
爬虫程序写过好多,包括模拟提交,模拟登录抓取数据等等,所以核心代码就决定用Java的HttpClient来实现,本来想用C#来的,但是想着上次用WebClient的坑到现在都没好好填上,还是算了,用java吧。
整体思路很简单,爬了列表后,组合列表Url,然后爬所有电影的ID,最后用豆瓣的api接口来获取每部电影的详细信息。
遇到的坑
中间测试时,遇到过两次问题,一次是被提示“你访问豆瓣的方式有点像机器人程序”,一次是直接被“403 Forbidden”,想来也是正常,服务器端肯定会有监测,大量的同一IP访问,肯定会被限制掉,试了下,增加300ms延时,更换UserAgent,再试,解决了,本以为就这么easy的时候,发现个问题,隔了一段,还是会被403,这就奇怪了。
经过几次测试,发现这个也很好解决,因为用java跑的时候,会发生403,而在浏览器里面不会出现,这个时候很大程度上应该就是cookie了,对比了header头文件,发现在cookie里面有个奇怪的东东,如下:
bid=3OGLDtR3vdY;
果断的在被403以后,随机生成了bid的值,再次测试,OK!
先记录这么多,今天把所有电影的ID采完,然后明天采具体的内容吧,代码会在稍后提供,当然了,采集的数据肯定也提供喽,:)