这几天在学校里也没有什么事,就翻了翻程序接单群,想赚几个鸡腿钱,于是就找了一个看起来还挺简单的爬虫需求,接了下来
要求是爬取豆瓣2018年所有的电影信息,豆瓣算是爬虫学习必爬的一个网址了,这也是我觉得简单的一个原因.
接下来就开始写代码,当时是三点,我自信满满的说会在六点之前把代码交给他,代码写的很快,大概逻辑是这样的:
1.分析网页结构:
在豆瓣2018分类下,只展示了20个电影其余电影是点击"加载更多"按钮才能出来的,这是爬虫第一个难点,第二个就是,需要点进去才能看到点影响评分,地区,上映时间等详细信息.
解决方案,放弃直接在网页上爬取,去找json数据
2.观察json的网址,找到规律,收集到所有的jsonurl,然后再解析json数据,从中得到电影信息的url,再存起来.
3.再爬取存储的url,通xpath把详细信息爬取下来,遇到缺省值则放弃保存
4.采用了多线程的方式爬取数据,url保存到queue中
逻辑上是没有问题的,代码也很快写完了,但是运行的时候出了问题.
豆瓣的反扒机制!
一分钟内,如果一个ip地址向豆瓣请求了超过40次的请求,则会暂时把这个ip封掉.宿舍的无线网已经被封掉了,自己的手机wifi也在第二次测试被办了,在废掉n个手机后,得出了一个结论,一个ip能爬取200左右的链接
当前我知道IP的解决方法--花钱去买代理池,但是费用昂贵,不值,
最后和买家商量了,把原本9900+的电影数据改成了1000左右,我在其他宿舍借用了n个手机,轮流给我开热点,终于完成了任务,拿着最后得到的七十块钱,感叹道真的好累呀!