- 探索
豆瓣电影网站数据爬虫
时间:2010-12-5 17:23:32 作者:娱乐 来源:热点 查看: 评论:0
内容摘要:豆瓣电影的数据爬虫,说白了就是一场和反爬机制的猫鼠游戏。我去年为了分析国产片评分趋势,写了套爬虫,结果第一天就被封了IP。不是技术不行,是豆瓣的反爬策略太“贼”了——它不直接拒绝你,而是给你返回一堆乱
豆瓣电影的豆瓣电影数据爬虫,说白了就是网站一场和反爬机制的猫鼠游戏。我去年为了分析国产片评分趋势,数据写了套爬虫,爬虫结果第一天就被封了IP。豆瓣电影不是网站技术不行,是数据豆瓣的反爬策略太“贼”了——它不直接拒绝你,而是爬虫给你返回一堆乱码,让你误以为是豆瓣电影自己解析出错。 爬虫的网站第一步永远是伪装。豆瓣会检查User-Agent、数据Referer、爬虫Cookie这些基础信息,豆瓣电影但真正麻烦的网站是它的请求频率限制。我实测过,数据单IP每秒超过3个请求,不出十分钟就会被临时封禁。解决办法是搭建代理池,用轮换IP来分散压力。但代理质量参差不齐,免费的那些基本是坑,响应慢不说,还经常被豆瓣识别出是数据中心IP段——那种IP一看就是爬虫用的,因为正常用户不会从机房访问豆瓣。 页面解析倒没什么难度。豆瓣的HTML结构很规整,class命名也清晰,用BeautifulSoup就能轻松提取电影标题、评分、导演这些字段。真正让人头疼的是它的动态加载。电影短评区是异步加载的,直接抓HTML只能拿到前20条。这时候得用Selenium模拟浏览器滚动,或者逆向分析它的XHR接口。我选了后者,因为Selenium太吃资源,开十个页面就能把内存吃满。 有个细节特别有意思。豆瓣对未登录用户的访问限制其实很宽松,但一旦你登录了账号,反而更容易被盯上。因为登录状态下的请求会带上更多的身份标识,豆瓣可以精确追踪你的浏览轨迹。我试过用普通账号登录后疯狂抓数据,结果第二天那个账号就被要求输入验证码——不是图片验证码,是那种需要滑动拼图的,明显是针对异常行为的升级防御。 数据存储也值得说道说道。豆瓣的评分数据是1到5星的整数,但页面上显示的是带小数的均值,比如7.6分。这意味着系统内部有更精细的加权算法,我们爬到的只是最终展示值。我抓了五千部电影后做了个统计,发现评分集中在6.5到8.5之间,两头极端值很少——这说明豆瓣的评分机制本身就有“去极端化”的倾向,或者说是用户打分习惯导致的分层现象。 最后说点实际的。纯粹为了学习写爬虫,豆瓣是个不错的练习场,因为它既有静态页又有动态接口,反爬强度适中——比微博弱,比知乎强。但你要是想大规模抓数据做商业用途,趁早放弃。豆瓣的《用户协议》里明确写了禁止未经授权的数据抓取,而且它的法务团队真的会发律师函。我认识一个做影视数据分析的朋友,就因为抓了豆瓣的票房数据放到自己产品里,收到了豆瓣的警告邮件,最后只能改成人工录入。这年头,技术问题往往不是最大的障碍,法律和道德边界才是真正需要掂量的东西。