1、Python语言大数据应用人才培养系列教材第十一章 项目实战:爬虫程序11.1爬虫概述11.2 爬虫3大库11.3 项目实战11.4 Scrapy框架11.1爬虫概述第十一章 项目实战:爬虫程序爬虫又称网络蜘蛛、网络蚂蚁、网络机器人等,它可以不受人工 干涉自动按照既定规则浏览互联网中的信息。我们把这些既定规则,称为爬虫算法。使用Python语言可以方便的实现这些算法,编写爬虫 程序,完成信息的自动获取。常见的网络爬虫主要有:百度公司的Baiduspider、360公司的 360Spiderx搜狗公司的Sogouspider、微软公司的Bingbot等。11.1爬虫概述第十一章 项目实战:爬虫程
2、序准备工作通常,我们在爬取一个站点之前,需要对该站点的规模和结构进 行大致的了解。站点自身的robots.txt和sitem叩文件都能够为我们了 解其构成提供有效的帮助。robots文件一般情况下,大部分站点都会定义自己的robots文件,以便引导 网络蜘蛛按照自己的意图爬取相关数据。sitemap文件站点提供的sitemap文件呈现了整个站点的组成结构。它能够帮 爬虫根据用户的需求定位需要的内容,而无须爬取每一个页面。估算站点规模目标站点的大小会影响我们爬取的效率。通常可以通过百度搜索 引擎的site关键字过滤域名结果,从而获取百度爬虫对目标站点的统 计信息。11.1爬虫概述第十一章 项目实
3、战:爬虫程序爬虫类型网络爬虫按照实现的技术和结构可以分为通用网络爬虫、聚焦网 络爬虫、增量式网络爬虫和深层网络爬虫。实际的网络爬虫系统通常 是由这几种爬虫组合而成。通用网络爬虫:别名全网爬虫。该类型的爬虫获取的目标资源在整个互联网中,其目标数据量庞大,爬行的范围广泛。比如:百度蜘蛛。聚焦网络爬虫:别名主题网络爬虫,是一种按照预先定义好的主题有选择的进行 网页爬取的网络爬虫。与通用网络爬虫相比,它的目标数据只和预定 义的主题相关,爬行的范围相对固定。主要用于特定信息的获取。11.1爬虫概述第十一章 项目实战:爬虫程序爬虫类型增量式网络爬虫:是指对已下载网页采取增量式更新和只爬行新产生的或者已经发
4、 生变化网页的爬虫,它能够在一定程度上保证所爬行的页面是尽可能 新的页面。和周期性爬行和刷新页面的网络爬虫相比,增量式爬虫只 会在需要的时候爬行新产生或发生更新的页面。深层网络爬虫:是一种用于爬取互联网中深层页面的爬虫程序。和通用网络爬虫 相比,深层页面的爬取,需要想办法自动填写对应的表单,因而,深 层网络爬虫的核心在于表单的填写。11.1爬虫概述第十一章 项目实战:爬虫程序爬虫原理不同的爬虫程序,其实现原理也不尽相同。但这些实现原理有许多的相似之处,即我们通常所说的共性。基于此,本节用一个通 用的网络爬虫结构来说明爬虫的基本工作流程。已下载网页数据,大数据应用人才培养系列教材第十一章 项目实
5、战:爬虫程序11.1爬虫概述11.2 爬虫3大库11.3 项目实战11.4 Scrapy框架11.2爬虫3大库第十一章 项目实战:爬虫程序Requests 库众所周知,Python语言属于胶水语言,可扩展性强。用Python编写爬虫 程序的最大好处就是其本身有很多实用的第三方库。免去了我们自己实现相 应功能的环节。Python爬虫有三个比较实用的库:Requests.Beautiful Soup 和LXMI,为我们编写爬虫程序提供了必不可少的技术支持,下面我们逐一介 绍。用Requests实现HTTP请求非常简单,操作也相当人性化。因此,Python 中常用Requests来实现HTTP请求过
6、程,它也是在Python爬虫开发中最常用的 方式。第三方库的安装方法有两种:第一种方式:使用pip进行安装。命令为:pip install requests第二种方式:直接到官网卜即:/7/7/7P丫坨011.0115.0噌下载最新发行 版,然后解压缩文件夹,运行setup.py即可。这里我们采用第一种方法。11.2爬虫3大库第十一章 项目实战:爬虫程序Requests 库requests库的使用:requests库的主要方法有七种,现简单介绍如下:get()方法主要用于获取HTML网页,相当于HTTP的GET。其返回对 象response的常用属性详见下表,我们可通过这些属性获取要访问域名
7、的基本信息。属性说明r.statusodeHTTP请求的返回状态,200表示捱接成功,404表示失败。r.textPHIIP响应内谷的字符串形式,即url对应的页面内谷Qr.encodings从HTTP header中猜测的响应内谷编码方式r.apparent_encoding从内谷中分析出的响应内谷的编码方式r.contentHTTP响应内谷的_进制形式11.2爬虫3大库第十一章 项目实战:爬虫程序Requests 库head。方法主要用于获取HTML网页头信息,相当于HTTP的HEAD。import requests r=iequests、head(http:”),【header/Cach
8、e.Contror:private,no.cache,no.store;proxyrevalidate,no.transform.Connection:K eep.Alive),Content.Encoding:gzip,Content.Type:texthtml;Date*:Tue,19 Jun 2018 0 5:35:22 GMT,Last.Modified,:Mon?13 Jun 2016 02:50:40 GXfT,Pragma:o.cache;Se rver:bfe11.0.8.18p11.2爬虫3大库第十一章 项目实战:爬虫程序Requests 库post。方法主要用于向HTTP网
9、页提交POST请求,相当于HTTP的 POSTo这里,我们给指定的url地址http:/httpbin.org用post。方法添 加sendinfo信息。import request sendinfo=name*:lily,fsex:female)r=requesUpostXlittpj httpbin.org post,data=sendinfo)priQt(rtext)args*:;dataw,files,/form,nameM:,liKH,sexM:*,femaleMJwheaders,:nAccepr:w*/*wpAccept.Encoding1:rgzip;deflate,Conne
10、ction:close”/ContenLLength120”Coment.iype”:application x.www.form-urlencoded,Host:httpbiiL org,User Agent”Jpythoniequests 28.4Jjson”:mill,origiir:”11323.8(M76“Jurl”:*http:httpbin.org post”一11.2爬虫3大库第十一章 项目实战:爬虫程序Requests 库put()方法主要用于向HTML网页提交PUT请求,相当于HTTP的PUT。sendinfo=name:lily,sex:female r=requests
11、putfhttpj httpbin.org put】data=sendinfo)print(r.text)4J“args:Jdata:“J:fiks:fbrnr:“name“:“UlyJseM:”fem#Jheaders:“Accept”:“7*“JAccept.EncodingJgzip:deflate”Connection1close”ContenLLength:20”Content.iypc 憎:“application x.www.form.urlencoded”,”Host:httpbin.org:User Agent:pythoniequests 28.4,;,json,:nuU
12、/,origin,:w113,123.80476W,http:httpbin.orgput,)11.2爬虫3大库第十一章 项目实战:爬虫程序Requests 库patch。方法主要用于向HTML网页提交局部修改请求,相当于 HTTP的PATCH。比如,我们用patch。方法修改刚才put()方法添加的字 典 sendinfo。sendinfo=name:*berrvr;sex:female r=requests.p.atch(littp:/httpbin.org patch,data=sendinfo)-)priQKrtextX1“args”:Jdata:TfilesIfbnir:naiiie
13、benT,seW:female”Tieaders”:Accept”:”*,/,Accept.Encodmg:,gzip,deflate*,Connection*:nclose,nContent.Length11:w2l,f,TContent.T ype】”appHcationx.www.fornLurluncoded”Host:httpbin.org”UserAgent:pythoniequests 2 18.4”jsoiT:iiullJorigiir:”113.123(M76Turi:“http/httpbiiiQrgpatch”一11.2爬虫3大库第十一章 项目实战:爬虫程序Reques
14、ts 库delete。方法主要用于向HTML页面提交删除请求,相当于HTTP的DELETEO比如,我们删除刚才patch。函数修改后的sendinfo字典。示 例代码如下:气瓢激4配tefhttps力httpbin.org/delete prjni.textX”args:JdataT7files1ft)nirX;lieaders】A cceptT*,TA ccept.Encodmg:gzip,de flateXonnection,closeXontentleng,:,07,Host:,,httpbm.org7,UserA gent,7,p)thon.requ est5218.4,jsoif:m
15、iirorigW:F3.123.80.1761U”httPs:/httpbiii3g/ddete%11.2爬虫3大库第十一章 项目实战:爬虫程序Requests 库request。方法,主要用来构造一个请求,支撑以上各个基础方法。通常使用下面格式来完成该方法的调用格式如下:requests.request(method,url,*kwargs)其中,method 是指请求方式,对应 上面所讲的get、put、post等方法;url代表目标页面的ud链接地址。*kwargs代表控制访问参数,共4个。比如params参数,代表字典或字节 序列,可作为参数增加到山中。代码演示如下:sendinfo=
16、name:lily sex:female r=requests.requestfPUT.http:6httpbin.org put.data=sendinfo)一 print(r.textwargs,:/data:esM:/fonn:rnamew:wlflyhsexw:female,headers,:,Accept,:*/*V Accept.Encodmg,:gzip,deflate,/Connection:Hclosett,Conteiit.Length,:R20rt,Content.Iype:wa pplication x.xrw.form.urlencoded,Host:phttpbm.
17、org,V,User.AgentM:,?p51hon.requests 2.18.4”,“jsoiT:milVorigiir:”113.123.80.176”,Hurr:Tittp:/httpbin.。喀put”评11.2爬虫3大库第十一章 项目实战:爬虫程序定向爬虫代码框架import requestsdef getHTNILText(url)r=requests.gett url,timeout=30),r.raise_for_status()如果状态码不是200,引发 HTTPError 异常,rencodmg=r.apparent_encodmgreturn rtext except:
18、retunT产生异常,if_name_=?_main_T,:#限定gelHTXILTextO只在所定义的文件中执行url www.baiducomZprinKgetHn ILText(url)11.2爬虫3大库第十一章 项目实战:爬虫程序BeautifulSoupBeautifulSoup库是用Python语言编写的一个HTML/XML的解释器。它可 以很好的处理不规范的标记并生成剖析树(parse tree),其本身提供了简单 又常用的导航、搜索以及修改剖析树的操作,利用它可以大大简化编程时间。本节主要介绍如何使用该库处理不规范的标记,按照指定格式输出对应的文 档。Html文档二二标签树=B
19、eautifulSoup 对象 .You didnt write that awful page.Youre just trying to get some data out of it.Beautiful Soup is here to help.Since 2004,its been saving programmers hours or days of work on quick-turnaround screen scraping projects.nA tremendous boon-Python4H Podcasthttps:/ 项目实战:爬虫程序bs4安装pip install
20、beautifulsoup4SB NDOWSsystem32cmd.exelicrosot Windows 10.0.16299.431c)2017 M icrosoft Corporation。保留所有权利。:UsersAdministrator pip install Beautiulsoup4ollecting Beautiulsoup4D ownloading https:/iles.py thonho s t e d.or g/p ack age s/9 e/d4/l 0 46 e5 c ac 7 73 e22 70 723 7b c d5,bB e a0 a5 76B0 a84 7
21、 e c 7 at 15B d7 ac e/b e aut i ul s oup44.6.0-py3fone-any.whl(86kB)47%I|40kB 63kB/s eta 0:00:0 58%n.nstailing collected packages:Beautiulsoup4Successfully installed beautiulsoup4-4.6.011.2爬虫3大库第十一章 项目实战:爬虫程序bs4基本操作创建BeautifulSoup对象时,首先得导入其对应的bs4库,格式如下:from bs4 import BeautifulSouphtml=The Dormouses
22、 storvv Htlexc head一The Dormouses storyv bxi p+Once upon a time there were three little sisters;and their names were*-a href=,-http:/ elsie1 class=,sister id=linklxj Elsie 一Lacie andaTmiec a中and they lived at the bottom of a wellvp+1一-Vpawe J接下耒,我1门仓|建BeautifulSoup又寸象,6soup=Beauti ful Soup(html.11.2
23、爬虫3大库第十一章 项目实战:爬虫程序BeautifulSoup 库的对象通常,Beautiful Soup库用于将一个复杂HTML文档转换成一个复杂的树 形结构,每个节点都是一个Python对象,根据功能划分,将BeautifulSoup库 的对象可分为四类,具体包括:Tag:Tag相当于html种的一个标签。有两个重要的属性name和attrs。name:每个Tag对象的name就是标签本身的名称;attrs:每个Tag对象的attrs就 是一个字典,包含了标签的全部属性。#提用I Tag标卷a print(soup titletjtle?=-The Dormouses storyv/ti
24、tle aaa print(typ.esoup title print(soup.a.name-AAA-4-1 aaa pri nt(s o u p.a.attrs-print(soup.p.string-The Dormouses story/pnntCtypeCsoup.p.string)1 d11.2爬虫3大库第十一章 项目实战:爬虫程序BeautifulSoup 库的对象BeautifulSoupBeautifulSoup对象表示的是一个文档的全部内容。大部分时候,可 以把它当作Tag对象,是一个特殊的Tag,我们可以分别获取它的名 称、类型以及属性。接本节例子输出如下:pri.rit
25、soup nameh1MftQurn.gotF phnUtypelsoup name)中 print(soup.attrs-1(K1/11.2爬虫3大库第十一章 项目实战:爬虫程序BeautifulSoup 库的对象CommentComment对象是一个特殊类型的NavigableString对象,其实际输 出的内容仍然不包括注释符号,但是如果不好好处理它,可能会对我 们的文本处理造成意想不到的麻烦。从本节开始所定义的数据源html 字符串中,我们找一个带有注释的a标签,如下:pnnt(soup.aH print(type(soup.a.string)print(soup.find_all(
26、rar),Lacie,Tillie11.2爬虫3大库第十一章 项目实战:爬虫程序遍历文档另外,name参数也可是列表list、正则式或方法。具体示例分别如下:第一种,name参数为列表list,如本例中的 print(soup.find_all(rab1)hThe Dormouses storyT a class=sister hef二httpH id=1inkT、L,日e LacieT 11.2爬虫3大库第十一章 项目实战:爬虫程序遍历文档第二种,name参数为正则式,如本例中的八b,以b开头的标签 都能够找到。import re pn nt(s o u p f i n d_al I(re.
27、co mp i I e(,Ab,)-1The Dormouses story0nce upon a time there were three little sisters:and their names were1.Elsiehttp:/ andhttp:/ they lived at the bottom of a well.,The Dormouses story11.2爬虫3大库第十一章 项目实战:爬虫程序遍历文档第三种,传递函数。如果没有合适过滤器,那么还可以定义一个方法,方 法只接受一个元素参数,如果这个方法返回True表示当前元素匹配并且被找 到,如果不是则返回Falseo下面方
28、法校验了当前元素,如果包含class属性却 不包含id属性,那么将返回Trueo示例代码如下:def has_class_but_no_id(tag)?return tag.has_attrCclass)and not tag.has_attrCi(T-1 soup.find_all(has_class_but_no_i耻 The Dormouses story,Once upon a time there were three little sisters;and their names were*-1!,.ElsieLacie andTillie;and they lived at the
29、 bottom of a well,/11.2爬虫3大库第十一章 项目实战:爬虫程序遍历文档keyword 参数如果一个指定名字的参数不是搜索内置的参数名,搜索时会把该参数当作 指定名字tag的属性来搜索,如果包含一个名字为id的参数,Beautiful Soup会 搜索每个tag的 id”属性。示例如下:soup.find_all(id=,link2,)Lacie如果使用多个指定名字的参数可以同时过滤tag的多个属性,Soup对象 只保留同时具有指定限定符的标签。示例代码如下:soup.find_all(href=pile(nelsieM),id二linkV)11.2爬虫3大库第十一章 项目
30、实战:爬虫程序遍历文档text参数通过text参数可以搜搜文档中的字符串内容。与name参数的可 选值一样,text参数接受字符串、正则表达式、列表、True等参数。soup.fin d_al.l(text=Els i ey卜 soup.find_all(text=rTillieI Tlsie,Lacie,)4-1PLacie,Tillie1 soup.find_aJKtext=pile(Dormouse)The Dormouses story,The Dormouses story soup.fin d_aI l(text=Tru e)The Dormouses story,*n,Vi*,T
31、he Dormouses story,Once upon a time there were th ree little sisters;and their names weren Elsie ,n Lacie,andn Tillie,*;nand they lived atthe bottom of a well.*,An,5W二二二_11.2爬虫3大库第十一章 项目实战:爬虫程序遍历文档limit参数find_all()方法返回全部的搜索结构,如果文档树很大那么搜索会很 慢。当莪们不需要全部结果,可以使用limit参数限制返回结果的数量.效果与SQL中的limit关键字类似,当搜索到的结果
32、数量达到limit的限 制时,就停止搜索返回结果。soup.find_aJICa?limit=2L Elsie Lacie/11.2爬虫3大库第十一章 项目实战:爬虫程序遍历文档recursive 参数通常,调用tag的find_all()方法时,Beautiful Soup会检索当前tag的 所有子孙节点,如果只想施索tag的直接子节点,可以使用参数recursive二False。soup.html.findLalHttleThe Dormouses story soup.html.findqll(title“,ecursive二False)时 d_另外,find还有许多衍生的方法。这里就不
33、再一叙述,如有需要,可参阅beautifulsoup的帮助文档。11.2爬虫3大库第十一章 项目实战:爬虫程序Lxml 库Ixml是Python语言里和XML以及HTML工作的功能最丰富和最容易 使用的库。它是另一个Python爬虫的常用库,它是基于Iibxml2这一 XML解析库的Python封装,速度比BeautifulSoup快。Ixml 库安装:pip install Ixml11.2爬虫3大库第十一章 项目实战:爬虫程序Lxml基本操作text=The Dormouses storyThe Dormouses storyOnce upon a time there were thre
34、e little sisters;and their names were,Lacie andhttp:/ they lived at the bottom of a well.http:/ 项目实战:爬虫程序Lxml基本操作 from lxml import etree-*-1AAA text=1The Dormouses story-1Th e Dormouses storyOn ce upon a time there were three little sisters;and their names were-*-1 EJsle.x/ahttp:/exampI anc*-1a h re
35、f=http:Z/exa m p I e.co rrVti 11 ie class=siste id-linyBSATilliev/a;61and they lived at the bottom of a well.-.-1WWW.aaa html=etree.HTML(text-1 result=etree.tostringChtml-Aprj.nttresult-tThe DormouseVs storyn-The DormouseVs storynOn ce upon a time there were three little sisters;and their names were
36、n3n-Lacie-andnTillie;nand they lived at the bottom of a well.n.n prjnt(result.decodeCutf.8 1)1The Dormouses storyThe Dormouses storyOnce upon a time there were three little sisters:and their names were a href=Wp7/example.corrvelsie class=sister id=linkl xl.ElsieLacie andhttp:/example.corrv1acieTilli
37、evhttp:/ they lived at the bottom of a well.11.2爬虫3大库第十一章 项目实战:爬虫程序Lxml基本操作parse方法来读取html文件。首先定义一个名为text.html的html文件,内容如下:.iThe Dormouses storyiOn ce upon a time there were three little sisters;and their names wereiL Elsie,http:/exampI and J they lived at the bottom of a well.i然后,编写如下程序代码:vfrom lxml
38、 import etreehtml=etree.parseCtexthtml)result=etree.tostring(html,pretty_print=True)i print(result.decodeCutf.811.2爬虫3大库第十一章 项目实战:爬虫程序Lxml基本操作Lxml库中的标签搜索方法,在Lxml库中可用find。、findall()及 Xpath()三种方式来搜索Element包含的标签对象。其区别如下:find。返回第一个匹配对象,其参数使用的xpath语法只能用相 对路径(以开头);findall。:返回一个标签对象的列表,其参数使用的xpath语法只能 用相对路
39、径(以开头);xpath。:返回一个标签对象的列表,其参数使用的xpath语法既 可以是相对路径也可以是绝对路径。11.2爬虫3大库第十一章 项目实战:爬虫程序Lxml基本操作#find all()函数,J result=html findallCZ/a*)pnntCresultK1,#xpath绝对路径检索 resuJt=html.xpath(7/aA PrintCresult-,xpath相对路径检索 result=htmlxpathC-Z/aV pnntCresultK,大数据应用人才培养系列教材第十一章 项目实战:爬虫程序11.1 爬虫概述11.2 爬虫3大库11.3 项目实战11.4
40、 Scrapy框架11.3项目实战第十一章 项目实战:爬虫程序酷狗Top500排行榜数据爬取通过以上对爬虫基础知识及Python爬虫程序设计中所涉及的三大 库的学习。本节我们以获取酷狗TOP5。”排行榜数据为例,实战练 习基于Python的简单爬虫程序设计思路及实现过程。思路简析1.任务要求以酷狗网站TOP5。歌曲排行榜网页为定向爬取对象,通过爬 虫程序获取其页面中排名前5。的歌曲的rank、singer”、titles”times”字段值,并输出结果。2.环境要求确保已经正常安装Python安装包、Requests模块、BeautifulSoup 模块、Lxml模块。11.3项目实战第十一章
41、 项目实战:爬虫程序酷狗Top500排行榜数据爬取血口瞋 requests颂 bs4 import BeautifulSoup血口瞋time,Meis.=9,UserAgent:Mozilla/5.0(Windows NT 6.1;WOW64)AppleWebKiV537.36(KHTML,like Gecko)Chrome/56.0.2924.87 Safari/537.36P卜def get_info(url):+Jwb_data=限期您及。现M,headers:headersso.=BeautifulSoup(wb data.text.Ixmiyranks=soup.selectfspa
42、n.pc temp numtitles=soup.selectfdiv.pc temp songlist ul li a尸times=soup.selectfspan.pc temp tips r span*or.rank,title,time in zip(ranks,titles,times)#str1=title.get卿O.spIKdata=WrM:rank.get_text().strip(),4J,sioger:前加抉刎:str1-1/time:time.get textO.stripO-1喇data*_name_=_main_岫二卜W/ i in range(1,30 k1 意
43、url in Ms#getjnMuri)则以妫以2W11.3项目实战第十一章 项目实战:爬虫程序酷狗Top500排行榜数据爬取Run pc t xanl rani raniJ493,singer494,1 singer1495,singer落龙,5。谑:大哲s。运:林志炫J song:行者,time:3:023 闯码头,time:3:7 单身情歌time:4:37II耳 xanl496,singer夏天播放,song:小宝贝time:匕:12日 rani raniJ49;,singer1498,singer高进、小沈阳工、光良。若:song:我的好兄弟,、】联:4W 童话,time:4:04曾
44、 xanlJ499,singer凤凰传奇song:郎的诱惑疝ne:3:41X raniPiocess500.singeifinished kith ex麦小兜、单色凌,i.t code 0song:OK歌time:3:1511.3项目实战第十一章 项目实战:爬虫程序酷狗Top500排行榜数据爬取irnM requests1to bs4 import BeautifulSoup加电It time。!jeaders=9,UserAgenf:Mozilla/5.0(Windows NT 6.1;WOW64)AppleWebKiV537.36(KHTML,like Gecko)Chrome/56.0.
45、2924.87 Safari/537.36卜def get_info(url):+Jwb_data=requejts.flei(url,headers 二 headers=BeautifulSoup(wb data.text.Ixmiyranks=soup.selectfspan.pc temp nurrf*titles=soup.selectfdiv.pc temp songlist ul li atimes=soup.selectfspan.pc temp tips r span*Q.rank,title,time in zip(ranks,titles,times):str1=title
46、geLtgrfO.splitf.ydata=eTM:rank.getjext().strip()Bflgf:st川(VW:str1-1,lime,time.get text().stip(V喇(dataW_name_=_main_:p助:/ in ranged 30V就 url in urls:get加则time反感鼠2V大数据应用人才培养系列教材第十一章 项目实战:爬虫程序11.1 爬虫概述11.2 爬虫3大库11.3 项目实战11.4 Scrapy框架11.4 Scrapy框架第十一章 项目实战:爬虫程序爬虫框架Scrapy是一个非常优秀的框架,操作简单,拓展方便。是比较流行的爬虫解 决
47、方案。Scrapy是一个用Python写的爬虫框架,简单轻巧,使用方便。Scrapy 使用Twisted异步网络库来处理网络通讯,架构清晰,其包含的各种中间件可以 良好的完成各种需求。Scrapy 文档地址:https:/doc.scrapy.org/en/latest/引擎:负责控制在系统中所有组件间的传递,并在相应动作发生时触发对 应事件。调度器:它负责接受引擎发送过来的requests请求,并按照一定的方式进 行整理排列,入队、并等待Scrapy Engine(引擎)来请求时,交给弓|擎。下载器:负责下载Scrapy Engine(弓|擎)发送的所有Requests请求,并将其 获取到的
48、Responses交还给Scrapy Engine(引擎),由引擎交给Spiders来处理。Spiders:负责处理所有Responses,从中分析提取数据,获取Item字段需要 的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler(调度器)。11.4 Scrapy框架第十一章 项目实战:爬虫程序爬虫框架11.4 Scrapy框架第十一章 项目实战:爬虫程序框架安装通过pip install Scrapy方式女装。C:MJsersXAdministratorpip install scrapyCollecting scrapyUs ing cached https:/files.
49、pythonhosted.org/packages/db/9c/cblSb2dc6063a80SaFd 21b9b396e0e965800765b51da72el7cf340b9be2/Sci*apy1.5.0py2.py3none-any.whl Re quire nient already satisfied:seru ice-ident ity in d:python libs ite-packages Requirement already satisfied:PyDispatchei*=2.0.5 in d:python libs ite-packages =l.17.0 in d:
50、pythonlibs ite-packages error:Microsoft Uisual C+14.0 is required.Get it with MMicrosoft Uisual C+Build Tools*:http:Z/landinghub.uisualstudio.con/uisual-cpp-build-tooIs11.4 Scrapy框架第十一章 项目实战:爬虫程序框架安装FScvisualcppbuildtools_full.exe 运行安装visual C+Build Tools然 后,在docs对话框中输入pip install Scrapy回车。Installin