Python大数据习题:如何抓取豆瓣上的电影
现在到处都说“大数据”,我也跟着标题党一下。今天要说的这个,还算不上大数据,只能说跟以前的习题相比,数据量略大了一点。
前阵子我们做了个抓取热映电影的程序。有个朋友看到了就说,他正好需要一项数据:豆瓣上的电影按评价人数从高到底排序视频教程。他认为,单是评分高低并不能说明一部电影的受关注度,比如有些分超低的奇葩大烂片照样火得很。但豆瓣本身并没有提供类似的功能。所以他想找我帮忙。我说你要排出多少?他说三千部。我说你这是要开录像厅吗!一天看一部也得看个八、九年。他说这你甭管,我这是要用来做决策参考的。
我想了想,觉得这事也不是太难搞定,只是有些复杂,要处理几个问题。不过这倒是一个用来练手的好题目。于是秉着授人以鱼不如授人以渔的原则,我决定把这个问题整理一下,抛给大家。
问题描述:
抓取豆瓣上的电影,按评价人数从高到低排序,列出前3000部。
每部电影显示名称、评价人数、豆瓣评分、豆瓣链接。
问题分析:
基本思路是:1.抓下所有的电影;2.按评价人数排序
然而豆瓣上并没有提供“所有电影”这样一个列表,也没有一个全覆盖的分类,有的只是:标签。
http://movie.douban.com/tag/?view=type
这个页面就是豆瓣的标签页面,上面列出了常用的标签。但一个电影可能有很多个标签,也可能不含有这里列出的标签。另外我尝试了下在线学习,每个标签只能显示前50页也就是1000部电影。
所以我想到的方法就是:先抓取这个页面上的所有标签,然后进入每个标签页的前50页抓取电影列表。我们要的信息列表页上都已经有了,不用再进入影片页面。但在记录电影的时候,需要去除重复。已经记录下的电影就不再重复记录。这个操作可以在抓取的时候进行,也可以先全部抓取,再去重。
这样做其实未必能抓到所有电影,不过对于我们这种精确度不需要很高的需求来说,应该足够了。
得到所有影片的信息之后,接下来排序就比较容易了。Python中提供了sort方法。但这里可能遇到的问题是,影片数量太多,导致读写和排序都很慢。一个供参考的优化方法是:在抓取的时候就分段存储,预先给评价人数设定一些值,按这些值来存储不同级别的电影。最后排序的时候可以每一段分别排序,而如果高评价人数的电影已经超过三千部,就无需再排后面的影片。
结果展示:
最后的结果建议保存成一个html文件,并且把影片的豆瓣地址做成链接。这样在浏览器中查看的时候,就可以直接链接到对应的豆瓣页面上。
你还可以增加一些数据统计,比如评价人数的分布,评分的分布,评价人数与评分的关系等。对Web开发熟悉的同学,甚至可以把这些数据做成一个小网站技能培训,用来对豆瓣电影进行多维的搜索排序,成为一个个性化的电影推荐应用。
文章来源于Crossin,由课课家平台整理,转载请注明。