let,7 行代码,怎么爬取豆瓣电影的数据,大庆

重视并标星「人人都是产品司理

每天早07 : 45 准时送达


7行代码,怎样爬取豆瓣电影的数据。技能背面的原理是什么?

这篇文章,作者带你一同“走进爬虫”:

作者:linghu

题图来自正版图库 图虫构思

全文共 6424 字 7 图,阅览需求 15 分钟


作业的时分,想要查找“产品规划”,能够直接在搜索引擎上输入内容,就能够直接找到数以百万计的材料。


上下班路上,刷新闻类APP的时分,只需乐意,就会有连绵不断的新的信息,满意刷一路的时间。



搜索引擎和(大多数)新闻类APP都不自己出产内容(尽管有些渠道孵化了自己的内容,但也只占整个渠道内容的很少的一部分,更重要的是,本钱十分高)。


那么,他们的许多的内容从哪里来?


“咱们不出产内容,仅仅内容的转移工”,将互联网上的内容“转移”到自己的服务器上,这便是爬虫。


首要,咱们需求了解一下互联网的结构:

互联网上的内容数以亿计,尽管很杂乱,但说白了便是一张大网,网上的每个节成人女子点便是一个网页,衔接网页的超链接(Hyperlinks)相当于线,线把一切的节点衔接在一同,形成了一个杂乱的网。
经过点击超链接的文字或许图片,就能够跳转到对应的网页。爬虫能够主动拜访到每一个网页,并把网页的内容保存下来。

世界上榜首个网络爬虫由麻省理工学院的学生马修格雷(Matthew Gray)在1993年写成,之后的爬虫尽管越来越杂乱。


比方:能够完成更快的拜访速度、拜访更多的网页、更好的将网站内容解分出来。但爬虫的根本原理是相同的,都首要包含三个部分:拜访网页链接,下载网页内容,解析网页内容。


爬虫的作业进程与咱们查找网页的进程是相同的。


比方,咱们想要查一下豆瓣上最新的电影:首要,在浏览器地址栏输入网址链接 https://movie.douban.com/  ;之后,浏览器会跳转到豆瓣电影;终究,咱们就能够找到当时热映的电影。


相同的,一个最简略的爬虫三步就能够爬取一个网页:


  1. 拜访这个网页let,7 行代码,怎样爬取豆瓣电影的数据,大庆;

  2. 把网页内容下载下来;

  3. 对下载的内容进行解析。


一、let,7 行代码,怎样爬取豆瓣电影的数据,大庆7行代码爬取豆瓣电影


最简略的爬虫三步就能够爬取一个网页,那么要写多少行代码呢?


咱们写一个爬虫,爬取豆瓣的“一周口碑榜”,只需7行代码!



这儿咱们运用Python言语——至于为什么挑选Python言语,会在后边告知清楚,假如不明白Python也没有联系,了解爬虫是怎样作业的就能够了。


代码如下:


import requests from lxml

import html url=’https://movie.douban.com/’ # 1.需求爬数据的网址

page=requests.Session().get(url) # 2.拜访网页

tree=html.fromstring(page.text) # 3.解析网页的进程

result=tree.xpath(‘//td[@class=”title”]//a/text()’) #4.解析网页的进程

print(result) # 打印出成果


在Python环境中运转这几行代码,就能够获取“一周口碑榜”了,成果如下:


[‘迦百农’, ‘绿皮书’, ‘驯龙高手3’活春, ‘速成家庭’, ‘阿丽塔:战役天使’, ‘肤色’, ‘逝世天使’, ‘拂晓墙’, ‘小小伟人’, ‘出路’]

其间最要害的是解析武林别传戟神加点网页内容,首要是(‘//td[@class=”title”]//a/text()’)这行代码,大多数人或许对比较困惑。


这涉及到HTML网页的结构:


能够把网页了解成一个文件夹,翻开一个文件夹,会发现子文件夹,子文件夹或许还有文件夹;经过翻开一个个文件夹,终究找到需求的数据。


  •  //td :这个相当于大目录;

  • [@class=”title”]:这个相当于小目录;

  •  //a :这个相当于最小的目录;

  • /text():这个是提取其间的文字内容。


至所以怎样写出来这行代码的,能够经过在网页空白处点击右键,查看源代码,就能够找到对应的td、class=”title”、a等标识符。



大多数程序员写爬虫挑选python的理由很简略:


首要,python有许多的库,能够直接调用,比方:上面的代码就引入了requests、lxml库,别离完成拜访网页、对网页结构解析。有开源的库,就直接调用,防止重复造轮子。


其次,python写起来很便利,装备也简略,短短几行的代码,就能够直接运转了,假如运用C或许Java,或许装备环境就要老半天。


二、一个简略的爬虫体系


把上面的每个过程别离完成(模块化),就能够构成一个简略的爬虫体系。


运用URL(能够了解为网址链接)管理器管理一切的网址链接,运用HTML(能够了解为网页内容)下载器下载网页内容,运用HTML解析器对下载的内容解析,再加上数据存储模块、操控整个爬虫的调度模块,就构成了一个简略的爬虫体系。


爬虫根本架构


更详细的说,URL管理器担任管理一切的网址链接,记载下哪些URL现已爬取了,哪些还没有爬取。假如爬取过了,就要防止再次下载;假如没有,就要参加行列,等HTML下载器下载。


HTML下载器能够从服务器下载整个网页的内容打臀缝,从URL管理器中获取未爬取的网址链接,之后,拜访这些网页链接,下载网页。


HTML解析器担任解析下载好的网页,首要有两个使命:一方面,解分出需求的信息,比方上文的“一周口碑榜”;另一方面,解分出新的URL链接,交给URL管理器,持续下载,这个功用在上面的“7行代码”普法栏目剧溺成长没有完成。


数据存储器完成存储数据的功用,将HTML解析器解分出来的信息存储起来,否则每次运用都要下载,会糟蹋许多的时间。


图片、文档之类的文件能够直接保存到服务器上,文字类的能够经过数据库存储起来。


爬虫调度器作为体系的大脑,担任统筹其他四个模块的和谐作业。


不管是大型的仍是小型的爬虫尽管在规划细节,功能上有所不同,但都不会脱离这五个模块。


三、更深化的考虑


乍一看,每个模块完成起来都很简略,但细想,好像每个模块都要考虑静香凶恶许多东西。


1. 初始的网址链接怎样取得


7行代码爬取豆瓣电影,直接访冯正宏问网址链接(https://movie.doskrrruban.com/  )就能够爬取“一周口碑榜”。对稍大一些的爬虫体系或许商用爬虫,就要有更多的考虑了:在确保获取足够信息的一起,也要确保下载的质量。


对搜索引擎公司而言,要尽或许包含互联网一切的信息;对笔直范畴,更多的倾向事务类信息。


比方:对新闻类的APP,首要包含一些新闻网站、政府网站等,对Github这类的编程网站,他们或许就不感兴趣。


巧妇难为无米之炊,初始的网址链接根本要靠人工凭经历获取,比方:新闻类的APP,他们的初始URL列表里或许就包含let,7 行代码,怎样爬取豆瓣电影的数据,大庆新浪、网易、搜狐等门户网站,也包含各个等级的政府网站,还有人民网、新华社、人民日报等媒体的网站。


2. 怎样确认哪些网页现已下载过了


当一个页面下载完成后,从这个网页中提取出其间的网址链接,把它们增加到等候下载的行列中,就能够取得更多的网址链接。


假如一个网页现已下载过了,从头下载,会耗费许多的时间,并占用存储空间。更要命的是,假如一向重复下载,就或许堕入桂浩明新浪博客死循环。


那么,怎样知道这网址链接是不是现已下载过了?


关于小型爬虫,能够运用列表存储下载过的网址链接,当有新的网址链接的时分,先查找这个列表中有没有该网址链接。假如有的话,就不必刺进,假如没有的话,就刺进列表,等候拜访下载。


关于大型爬虫,有成百上千个“小爬虫”(愈加专业的名词叫做散布式爬虫),散布在不同的服务器上,一起爬取网址链接,就要考虑更多的东西。


比方:不同爬虫之间的分工和通讯,怎样一起维护上述的列表。


当数据很大的时分,就要考虑散布式、通讯、存储、带宽等每个环节的约束,不管哪个环节没有做好,都有或许成为体系的瓶颈,这就像是木桶效应钱庄血案中的短板。


数据量增加10倍,之前的代码或许要重写了,作业量或许就要增加100倍,这也是质变引起质量的一个很好的比方。


在计算机范畴,这样的比方随处可见,当数据增大到必定量级,原有的算法很或许无法持续运用,需求从头开发,随之而来的是加班、DEBUG以及延期上线。


3. 页面的解析


爬取豆瓣电影的“一周口碑榜”,需求研讨网页的源代码,并编写对应的解析代码。可是网页的结构不同,用这个代码爬取知乎,解析不到任何内容。


以新闻类的APP为例:一个好的新闻类APP需求爬虫数以亿计的网页,并把里边的文字、视频、图片别离解分出来,难度可想而知。


好消息是一部分网站会恪守RSS标准(恪守RSS标准的网页结构和代码都有相似性,以便于订阅器获取首要信息),一种类型的爬虫就能够爬取许多这种相似的网页。但大部分的网站的结构,都是不同的,这需求算法工程师花费许多的时间和精力做解析作业。


四、反爬虫


新闻类APP经过爬虫,取得许多的优质资源,读者也乐意在一个渠道上看到一切的内容,但“被爬取”的网站就不太高兴了。关于大多数依托广告收入的网站,没有了流量,连生计都成了问题,更甭说盈余了。


一些自成体系的渠道,比方:大型电商渠道,他们期望一切的用户在自己的渠道上查找信息,一切的商家在自己的渠道上招引卖家(广告费可不能交给搜索引擎),相同不期望爬虫的打扰。


搜索引擎期望爬取更多的信息,优质的内容供给商又不期望被爬虫打扰,利益冲突难以谐和,所以发生了Robots协议来处理这个问题。


Robots协议网站服务器的一个声明,通常是保存在网站根目录下的一个TXT格局的文件,网站经过Robots协议告诉搜索引擎:哪些页面能够抓取?哪些页面不能抓取?


当爬虫拜访一个站点时,它会首要查看该站点根目录下是否存在robots.txt,假如存在,爬虫就会依照该文件中的内容来确认拜访的规模;假如该文件不存在,一切的爬虫将能百农4199够拜访网站上一切没有被口令维护的页面。


咱们运用搜索引擎,常常会看到“由于该网站的robots.txt文件存在约束指令(约束搜索引擎抓取),体系无法供给该页面的内容描绘”,便是源于这个协议。



值得注露胸相片意的是:Robots协议是国际互联网界通行的品德标准,并没有强制性约束力。


一些“没有品德”的爬虫相同会爬取有robots.txt约束指令的网站,这时分就需求一些技能来完成反爬虫了。


最常见的有三种方法:


1. 网站会依据IP地址拜访的频率确认是不是爬虫


每个电脑都有仅有的IP地址,每个爬虫也有仅有的IP地址,当电脑或许爬虫拜访网站的时分,网站会记载这个IP地址。假如同一个IP短时间屡次拜访同一个网站,这个网站或许会倾向于以为这是个爬虫,会采纳一些方法。


最常见的便是验证码、点击图片之类的验证机制了。


咱们运用12306买票的时分总需求点击图片,就熊猫娜娜是一种反爬虫机制——由于爬虫太多,一个爬虫每秒能够完成成百上千次的点击,在春运等顶峰时段,12306上爬虫点击买票的次数乃至要超过人点击的数量。所以,就爽性悉数运用验证机制。


当然,这在反爬虫的一起,也会给用户带来一些欠好的体会。


相比之下,一些比较优异的网站或许禾博士为什么那么廉价APP,会依据用户点击频率、时间距离等信息,判别是不是爬虫或许误点击,之后再确认是否需求验证。


更好的用户体会背面,是更大的开发本钱,更长的开发周期。


2. 网站也能够依据用户恳求的Headers来判别是不是爬虫


当咱们运用浏览器拜访网站的时分,浏览器会主动在拜访恳求上增加一些信息,比方:浏览器选用的编码方法、运用的操作体系、浏览器版别等信息放在拜访恳求的最开端,作为Headers,但爬虫一般不let,7 行代码,怎样爬取豆瓣电影的数据,大庆会附加这些信息。


网站会依据是否存在Headers信息以及Headers信息的内容,判别对方是不是爬虫,有必要的话,就回绝拜访。


3. 动态页面的反爬虫


之前将的HTML网页都是静态的,跟着HTML代码生成,页面的内容和显现作用就不会发作变化了。而动态网页则否则,动态网站是脚本言语(比方PHP)生成的,一些内容不是直接可见的,而是要运转一些脚本,才干看到。


网址后缀为htm、html、shtml、xml的网页是静态网页,而动态网页是以aspx、.asp、.jsp、.php、.perl、.cgi等方法为后缀,并且在动态网页网址中有一个标志性的符号“?”,这些不同的后缀根本代表了网页运用的言语。


拜访静态网页,只需求直接拜访链接就能够了,拜访动态网站,还需求履行一些特定的操作(比方点击),才干显现更多的内容,这就增加了爬取的难度,一些简略的爬虫就被拒之门外了。


介绍完三种干流的反爬虫的方法,终究要说的是:反爬虫技能也不是一了百了的,在反爬虫的开展进程中,爬虫也进化出了一系列反“反爬虫”的方法。


针对反爬虫验证IP机制,爬虫“进化”出了IP署理池,这样,爬虫就能够不断改换自己的IP地址,利诱反爬虫。针对4009515151Headers验证,爬虫也会生成一个Headers信息,乃至针对动态页面,也会模仿浏览器的行为。


尽管如此,反爬虫在必定程度上进步了爬虫的本钱,降低了爬虫的功率,就能够将一大部分爬虫挡在门外。


从爬虫与反爬虫的比方也能够看出:大多数时分,没有肯定的有用方法。进步对方的本钱,让对方觉得价值太大,因小失大,便是很好的处理问题的方法。


五、爬虫实let,7 行代码,怎样爬取豆瓣电影的数据,大庆现冷启动:成功即正义?


上面讲了爬虫是怎样运转的,常见的反爬虫机制。终究,咱们再讲一个爬虫的使用场景的比方,能够协助咱们更好了解爬虫。


冷启动是每一个产品司理、运营人员和创业者面对的重大问题。没有优质的内容,就招引不了用户,没有许多的用户,就无法招引优质的内容,就堕入了先有鸡仍是先有蛋的悖论。


爬虫,低本钱、快速地处理了这个问题!


“咱们不出产新闻,咱们仅仅新闻的转移工”,经过爬虫,低本钱、快速地let,7 行代码,怎样爬取豆瓣电影的数据,大庆爬取整个互联网的优质内容,并凭仗海量数据,使用算法完成内容分类和特性引荐,招引许多的用户,终究经过广告变现。


现实证明:这是个十分成功的商何诗标业形式。而媒体渠道和新闻网站雇佣许多编辑人员,花费许多时间、金钱写成的高质量内容,连说一声都没有,就这样被拿走了,这不是侵略人家版权嘛!


所以,多家媒体联合建议侵权诉讼或反对声讨,终究迫使这家新闻巨子付出书权费,但不管法律上、品德上有多少问题,都不影响这家公司商业成功的既定现实。


相似的作业相同发作在其他笔直范畴。


一家新建立的技能博客渠道,爬取竞争对手上的文章,敏捷完成优质内容的聚合。假如原博客主发现了自己的文章被盗用了,新的渠道就移送账号并看情况给予少量补偿。假如对方不乐意,就刊出账号,当一切都没有发作过。凭仗这种运营方法,顺利完成了冷启动。


短视频APP的后来者,也能够经过相似的方法,完成用户的堆集和优质内容的聚合。


成功即正义?


这好像是过于果断的一个点评。


上述的视频APP做得太过分,引起公愤,终究不得不封闭自己的渠道。


关于经过爬虫获取内容的渠道而言,内容的获取也仅仅万里长征的榜首步,经过运营手法减小出产内容的本钱,经过利益同享鼓励优质内容的发生,经过技能减小信息本钱招引用户,愈加任重而道远。


而版权,也始终是悬于头顶的达摩克利斯之剑。


—————— / END / ——————



———— / 引荐阅览 / ————

>> 有节奏地汇报作业,是一门技能活

>> 写给非技失禁文术产品司理的技能才能要求

>> 物联网年代的交互:安静技能规划规律

>>&nbslet,7 行代码,怎样爬取豆瓣电影的数据,大庆p;作为产品司理,你知不知道这些「技能黑话」?

>> 技能,正在怎样影响你独爱的影视剧和综艺?


每周问答


了解技能,对你的作业有多大协助?


在谈论区说出你的观点,就有时机取得精巧书本哦~



本期奉上的是人人都是帕兰巨食人鱼产品司理&起点学院联合出书书本《人工智能产品司理:人机对话体系规划逻辑探求》共2本:


人机对话是AI的重要分支,值得产品司理深化研讨。

本书协助产品司理快速了解AI技能鸿沟,深化了解各类语音帮手背面的对话体系,构建完善的常识体系结构。

等不及的童鞋,能够直接京东下单购买:

https://item.jd.com/12432163.html


一起满意以下条件的小伙伴们即可取得奖品:


1姜文被传心梗逝世. 高质量的留言(有必要贴题

2. 留言被赞数位列榜首

3. 留言被赞数不少于40个

4. 谈论被赞数计算在 周五晚6点前 截止


小编会在周六回复留言告诉中奖成果,参加活动的小伙伴记住时间重视本文的动态哦~

展开全文

最新文章