您现在的位置:主页 > 118kj开奖现场开奖记录 > 正文内容

把电影库搬回家---记一次爬虫之旅

发布日期:2019-10-30 17:01   来源:未知   阅读:
 

  网络爬虫即Web信息抓取,是利用程序下载并处理来自Web的内容,我们每天都在用的百度、搜狗、Google等搜索引擎就在大量的采用这种技术,这些搜索引擎运行了许多Web抓取程序,对网页进行索引。

  3、selenium:启动并控制一个Web 浏览器,它能够填写表单,并模拟鼠标在这个浏览器中点击,听到这大家可能明白了,这个模块主要用于Web页面的自动化测试;

  5、MongoDB:在任何应用中都需要持久化存储,一般持久化存储有三种机制:文件、数据库系统以及一些混合类型,数据库是持久化存储的流行解决方案。MongDB是非关系数据库(NoSQL,就是说在关系数据库中表和行、列,在这里对应的则是集合和文档、key。MongoDB的数据存储于JSON串中,json和python中的字典很相似,所以用Python操作MongoDB可以得心应手;另外在MongoDB中存储的数据其实就是一个对象,在关系数据库中几张二维表才能完成的事情,在MongoDB中一个集合就能搞定。

  用chrome打开豆瓣网站,进入选电影页面,按F12打开开发者工具看看网站结构,只能看到一堆字典形式HTML代码,无法看到具体类容

  滚动鼠标到页面最下面,有个“加载更多”链接,点击后继续展示电影海报,连续点击几次发现每次显示20部电影海报,而且页面没有刷新,确定是通过AJAX加载的电影数据

  把开发者工具切换到Network,点击‘XHR查看AJAX请求,每点击一次’加载更多就会出现一些新的请求,注意观察AJAX的请求,发现这个请求只有page_start在变化,而且表变化的规律是每次增加20。再回过头观察Query String Parameters 和requests.URL。会发现从后开始参数都是按顺序拼接的。

  我们再来看看这个请求的数据预览,有title电影名称,有rate电影评分,有cover电影海报,有url电影详情页面网址

  2、获取到电影详情url后,用requests获取html页面信息,然后用BeautifulSoup分析页面元素,获取电影内容。豆瓣用了反爬技术,用这种方法去访问页面很容易被封IP,所以采用多线程肯定是不行的,画线送水_画线在线玩。经过无数次测试后,改用selenium模拟人工控制浏览器访问页面,这种方法被封次数减少,豆瓣估计是用单位时间内的请求频率来反爬的,针对这种技术唯慢不破,如果要爬取海量数据这种方法肯定不行,还得研究一下分布式爬虫技术。

  1、获取ajax请求的json数据,构造request请求,由于请求只有page_start和tag会变化,所以把这连个参数做成列表类型的变量,然后来遍历这个列表,获取ajax的json数据:

  {电影名称: 西虹市首富, 豆瓣评分: 6.5, 分类: 喜剧, 电影链接: 导演: 闫非 / 彭大魔, 编剧: 闫非 / 彭大魔 / 林炳宝, 主演: 沈腾 / 宋芸桦 / 张一鸣 / 张晨光 / 常远 / 魏翔 / 赵自强 / 九孔 / 李立群 / 王成思 / 徐冬冬 / 艾伦 / 杨皓宇 / 黄才伦 / 王力宏 / 包贝尔 / / 张绍刚 / 杨文哲 / 陶亮 / 王赞 / 黄杨 / 刘鉴 / 杨沅翰 / 林炳宝 / 骆佳 / 陈昊明 / 臧一人, 类型: 喜剧, 制片国家/地区: 中国大陆, 语言: 汉语普通线(中国大陆), 片长: 118分钟, 又名: Hello Mr. Billionaire, IMDb链接: tt8529186, 内容简介: 西虹市丙级球队大翔队的守门员王多鱼(沈腾 饰)因比赛失利被教练开除,一筹莫展之际王多鱼突然收到神秘人士金老板(张晨光 饰)的邀请,被告知自己竟然是保险大亨王老太爷(李立群 饰)的唯一继承人,遗产高达百亿!但是王老太爷给出了一个非常奇葩的条件,那就是要求王多鱼在一个月内花光十亿,还不能告诉身边人,否则失去继承权。王多鱼毫不犹豫签下了“军令状”,与好友庄强(张一鸣 饰)以及财务夏竹(宋芸桦 饰)一起开启了“挥金之旅”,即将成为西虹市首富的王多鱼,第一次感受到了做富人的快乐,同时也发现想要挥金如土实在没有那么简单!, 评价人数: 660407, 5星: 9.6%, 4星: 29.1%, 3星: 44.4%, 2星: 13.1%, 1星: 3.8%}

  4、把电影信息写入数据库,由于爬取数据时IP经常被封,重头爬的话会出现很多重复数据,所以加入了判断,进行了数据去重处理

  1、爬取一个网站数据的重点还是在于分析网页结构,定位需要爬取的字段,找出规律,工具是其次;

  2、爬去方法有两种:一种是基于网页源代码,利用XPath,css选择器等获取数据,一种是基于ajax的请求,上面两种方法都用到了;

  3、做大型爬虫还得使用爬虫框架scrapy, 这次实践只是用做了解爬虫原理。