幼儿饰品瑜伽美体用品微软
投稿投诉
微软创意
爱情通信
用品婚姻
爱好看病
美体软件
影音星座
瑜伽周边
星座办公
饰品塑形
搞笑减肥
幼儿两性
智家潮品

python爬虫之Scrapy框架,基本介绍使用以及用框架下

  一、Scrapy框架简介
  Scrapy是:由Python语言开发的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据,只需要实现少量的代码,就能够快速的抓取。
  Scrapy使用了Twisted异步网络框架来处理网络通信,可以加快我们的下载速度,不用自己去实现异步框架,并且包含了各种中间件接口,可以灵活地实现各种需求。
  Scrapy可以应用在包括数据挖掘、信息处理或存储历史数据等一系列的程序中,其最初是为页面抓取(更确切地说是网络抓取)而设计的,也可以应用于获取API所返回的数据(例如AmazonAssociatesWebServices)或者通用的网络爬虫。二、Scrapy架构
  1、架构图
  官方架构图
  翻译架构图
  2、组件
  Scrapy主要包括了以下组件:爬虫中间件(SpiderMiddleware):位于Scrapy引擎和爬虫之间的框架,主要用于处理爬虫的响应输入和请求输出。调度器中间件(SchedulerMiddleware):位于Scrapy引擎和调度器之间的框架,主要用于处理从Scrapy引擎发送到调度器的请求和响应。调度器(Scheduler):用来接收引擎发过来的请求,压入队列中,并在引擎再次请求的时候返回。它就像是一个URL的优先队列,由它来决定下一个要抓取的网址是什么,同时在这里会去除重复的网址。下载器中间件(DownloaderMiddleware):位于Scrapy引擎和下载器之间的框架,主要用于处理Scrapy引擎与下载器之间的请求及响应。代理IP和用户代理可以在这里设置。下载器(Downloader):用于下载网页内容,并将网页内容返回给爬虫。
  Scrapy引擎(ScrapyEngine):用来控制整个系统的数据处理流程,并进行事务处理的触发。爬虫(Spiders):爬虫主要是干活的,用于从特定网页中提取自己需要的信息,即所谓的项目(又称实体)。也可以从中提取URL,让Scrapy继续爬取下一个页面。项目管道(Pipeline):负责处理爬虫从网页中爬取的项目,主要的功能就是持久化项目、验证项目的有效性、清除不需要的信息。当页面被爬虫解析后,将被送到项目管道,并经过几个特定的次序来处理其数据。
  3、运行流程
  数据流(Dataflow),Scrapy中的数据流由执行引擎(ScrapyEngine)控制,其过程如下:引擎打开一个网站(openadomain),找到处理该网站的Spider并向该spider请求第一个要爬取的URL(s)。引擎从Spider中获取到第一个要爬取的URL并在调度器(Scheduler)以Request调度。引擎向调度器请求下一个要爬取的URL。调度器返回下一个要爬取的URL给引擎,引擎将URL通过下载中间件(请求(request)方向)转发给下载器(Downloader)。一旦页面下载完毕,下载器生成一个该页面的Response,并将其通过下载中间件(返回(response)方向)发送给引擎。引擎从下载器中接收到Response并通过Spider中间件(输入方向)发送给Spider处理。Spider处理Response并返回爬取到的Item及(跟进的)新的Request给引擎。引擎将(Spider返回的)爬取到的Item给ItemPipeline,将(Spider返回的)Request给调度器。(从第二步)重复直到调度器中没有更多地request,引擎关闭该网站三、Scrapy安装以及生成项目
  1、下载安装
  Linux下载方式,直接安装pipinstallscrapy或者pip3installscrapy)
  windows如果用Pycharm的话,在Pycharm底部打开命令终端
  输入命令pipinstallscrapy
  2、创建Scrapy项目创建一个叫ScrapyDemmoscrapystartprojectScrapyDemmo进入项目文件夹cdScrapyDemmo创建一个名为baidu的爬虫,爬虫目标www。baidu。comscrapygenspiderbaiduwww。baidu。com
  创建完成后,目录结构如下:
  scrapy。cfg:项目的配置文件。scrapyspider:该项目的python模块。之后您将在此加入代码。scrapyspideritems。py:项目中的item文件。scrapyspiderpipelines。py:项目中的pipelines文件。scrapyspidersettings。py:项目的设置文件。scrapyspiderspiders:放置spider代码的目录。
  spiders下的baidu。py是scrapy用命令(scrapygenspiderbaiduwww。baidu。com)自动为我们生成的。
  内容如下:importscrapyclassBaiduSpider(scrapy。Spider):namebaidualloweddomains〔www。baidu。com〕starturls〔http:www。baidu。com〕defparse(self,response):titleresponse。xpath(htmldeadtitletext())print(title)
  当然,可以不用命令生成,可以自己在spiders下创建爬虫,您必须继承scrapy。Spider类,且定义以下三个属性:name:用于区别Spider。该名字必须是唯一的,您不可以为不同的Spider设定相同的名字。starturls:包含了Spider在启动时进行爬取的url列表。因此,第一个被获取到的页面将是其中之一。后续的URL则从初始的URL获取到的数据中提取。parse()是spider的一个方法。被调用时,每个初始URL完成下载后生成的Response对象将会作为唯一的参数传递给该函数。该方法负责解析返回的数据(responsedata),提取数据(生成item)以及生成需要进一步处理的URL的Request对象。
  3、运行爬虫
  运行方法:
  在项目目录底下用命令运行,如下,我项目目录D:PythonScrapyDemmo,运行name为baidu的爬虫D:PythonScrapyDemmoscrapycrawlbaidu
  在scrapy中,为了避免每一次运行或调试都输入一串命令,可以在项目文件下新建一个run。py文件,每次运行爬虫只需要运行此脚本即可。且运行调试模式也需要设置此启动脚本。fromscrapyimportcmdlinecmdline。execute(scrapycrawlbaidu。split())
  最后运行这个run。py即可,执行结果:D:PythonvenvScriptspython。exeD:PythonScrapyDemmoScrapyDemmorun。py2022102810:12:55〔scrapy。utils。log〕INFO:Scrapy2。7。0started(bot:ScrapyDemmo)2022102810:12:55〔scrapy。utils。log〕INFO:Versions:lxml4。9。1。0,libxml22。9。12,cssselect1。1。0,parsel1。6。0,w3lib2。0。1,Twisted22。8。0,Python3。9。13(tagsv3。9。13:6de2ca5,May172022,16:36:42)〔MSCv。192964bit(AMD64)〕,pyOpenSSL22。1。0(OpenSSL3。0。55Jul2022),cryptography38。0。1,PlatformWindows1010。0。22000SP02022102810:12:55〔scrapy。crawler〕INFO:Overriddensettings:{BOTNAME:ScrapyDemmo,NEWSPIDERMODULE:ScrapyDemmo。spiders,REQUESTFINGERPRINTERIMPLEMENTATION:2。7,ROBOTSTXTOBEY:True,SPIDERMODULES:〔ScrapyDemmo。spiders〕,TWISTEDREACTOR:twisted。internet。asyncioreactor。AsyncioSelectorReactor}2022102810:12:55〔asyncio〕DEBUG:Usingselector:SelectSelector。。。。。。
  若嫌弃scrapy日志文件太杂乱,想无日志输出,只需在后面增加nolog即可:fromscrapyimportcmdlinecmdline。execute(scrapycrawlbaidunolog。split())
  执行导出为json或scv格式,执行爬虫文件时添加o选项即可
  scrapycrawl项目名o。csv
  scrapycrawl项目名o。json
  对于json文件,在setting。js文件里添加,设置编码格式,否则会乱码:fromscrapyimportcmdlinecmdline。execute(scrapycrawlbaiduobaidu。csv。split())四、Scrapy配置文件settings。py
  默认配置文件,主要设置参数:BOTNAMEScrapyDemmoScrapy项目的名字,这将用来构造默认UserAgent,同时也用来log,当您使用startproject命令创建项目时其也被自动赋值。SPIDERMODULES〔ScrapyDemmo。spiders〕Scrapy搜索spider的模块列表默认:〔xxx。spiders〕NEWSPIDERMODULEScrapyDemmo。spiders使用genspider命令创建新spider的模块。默认:xxx。spiders爬取的默认UserAgent,除非被覆盖USERAGENTScrapyDemmo(http:www。yourdomain。com)如果启用,Scrapy将会采用robots。txt策略ROBOTSTXTOBEYTrueScrapydownloader并发请求(concurrentrequests)的最大值,默认:16CONCURRENTREQUESTS32为同一网站的请求配置延迟(默认值:0)Seehttps:docs。scrapy。orgenlatesttopicssettings。htmldownloaddelaySeealsoautothrottlesettingsanddocsDOWNLOADDELAY3下载器在下载同一个网站下一个页面前需要等待的时间,该选项可以用来限制爬取速度,减轻服务器压力。同时也支持小数:0。25以秒为单位下载延迟设置只有一个有效CONCURRENTREQUESTSPERDOMAIN16对单个网站进行并发请求的最大值。CONCURRENTREQUESTSPERIP16对单个IP进行并发请求的最大值。如果非0,则忽略禁用Cookie(默认情况下启用)COOKIESENABLEDFalse禁用Telnet控制台(默认启用)TELNETCONSOLEENABLEDFalse覆盖默认请求标头:DEFAULTREQUESTHEADERS{Accept:texthtml,applicationxhtmlxml,applicationxml;q0。9,;q0。8,AcceptLanguage:en,}项目管道,300为优先级,越低越爬取的优先度越高Seehttps:docs。scrapy。orgenlatesttopicsitempipeline。htmlITEMPIPELINES{ScrapyDemmo。pipelines。ScrapydemmoPipeline:300,}
  还可以设置日志的等级与日志存放的路径:
  相关变量LOGLEVELLOGFILEahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a名。log
  日志等级分为,默认等级是1DEBUG调试信息INFO一般信息WARNING警告ERROR普通错误CRITICAL严重错误
  如果设置
  LOGLEVELWARNING,就只会WARNING等级之下的ERROR和CRITICAL
  一般主要需要配置的几个参数,其他按需配置即可。
  USERAGENT:默认是注释的,这个东西非常重要,如果不写很容易被判断为电脑爬虫。
  ROBOTSTXTOBEY:是否遵循机器人协议,默认是true,需要改为false,否则很多东西爬不了
  DEFAULTREQUESTHEADERS:和USERAGENT类似,只是参数更完整。五、完整案例(下载图片)
  用scrapy框架下载以前的示例:python爬虫之批量下载图片
  1、修改settings。py主要参数关闭robot。txt协议ROBOTSTXTOBEYFalse页面延迟下载,我这里测试,可以先不设置DOWNLOADDELAY1是否启用CookieCOOKIESENABLEDTrue请求头DEFAULTREQUESTHEADERS{Accept:texthtml,applicationxhtmlxml,applicationxml;q0。9,;q0。8,AcceptLanguage:en,UserAgent:Mozilla5。0(WindowsNT10。0;Win64;x64)AppleWebKit537。36(KHTML,likeGecko)Chrome106。0。0。0Safari537。36}打开下载器DOWNLOADERMIDDLEWARES{ScrapyDemmo。middlewares。ScrapydemmoDownloaderMiddleware:543,}打开优先级,并添加自己编写的图片下载管道ITEMPIPELINES{ScrapyDemmo。pipelines。ScrapydemmoPipeline:300,ScrapyDemmo。pipelines。ImageDownloadPipeline:300,}添加下载储存目录IMAGESSTORED:Pythonpic文件保存时间IMAGESEXPIRES90
  2、定义Item字段(Items。py)
  本项目用于下载图片,因此可以仅构建图片名和图片地址字段。importscrapyclassScrapydemmoItem(scrapy。Item):图片下载链接imageurlscrapy。Field()图片名称imagenamescrapy。Field()
  3、编写爬虫文件(spiders目录下)
  这里文件名为:imagedownload。py
  以前用requests库和BeautifulSoup库下载图片,这里就不需要了,scrapy自带相关函数和方法。
  scrapy元素定位,提供三种方式,正则、Xpath表达式、css。
  我这里有xpath定位方式。importscrapyimportrefrom。。itemsimportScrapydemmoItemclassImageSpider(scrapy。Spider):nameimagedownloadalloweddomains〔desk。3gbizhi。com〕starturls〔https:desk。3gbizhi。comdeskMVindex。html〕defparse(self,response):导入Items。py字段itemsScrapydemmoItem()获取所有链接列表listsresponse。xpath(p〔5〕ulli)点位元素循环获取图片链接和图片名称foriinlists:图片名称imagenamei。xpath(。aimgalt)。get()图片链接items〔imageurl〕i。xpath(。aimg〔1〕)。get()。replace(。278。154。jpg,)图片格式类型imagetypere。sub(rh。d。,,items〔imageurl〕)拼接文件名,图片名称图片格式items〔imagename〕{}。{}。format(imagename,imagetype)yielditems循环跳转下一页,并重复返回数据,这里测试先下载1页的图片,总共23页。foriinrange(2,3):nexturlhttps:desk。3gbizhi。comdeskMVindex{}。html。format(i)yieldscrapy。Request(nexturl,callbackself。parse)
  关于yield的理解,先,如果你还没有对yield有个初步分认识,那么你先把yield看做return,这个是直观的,它先是个return。
  最主要的不同在于yield在返回值后还可以继续运行接下来的代码,使用的函数会返回一个生成器,而return在返回后就不在执行代码。
  以上两个yield:yielditems:这里我们通过yield返回的不是Request对象,而是一个ScrapydemmoItem对象。scrap有框架获得这个对象之后,会将这个对象传递给pipelines。py来做进一步处理。我们将在pipelines。py里将传递过来的scrapy。Item对象保存到数据库里去。yieldscrapy。Request:这里是在爬取完一页的信息后,我们在当前页面获取到了下一页的链接,然后通过yield发起请求,并且将parse自己作为回调函数来处理下一页的响应。
  4、修改管道文件pipelines。py用于下载图片
  除了爬取文本,我们可能还需要下载文件、视频、图片、压缩包等,这也是一些常见的需求。scrapy提供了FilesPipeline和ImagesPipeline,专门用于下载普通文件及图片。
  继承Scrapy内置的ImagesPipeline,只需要重写getmediarequests和itemcompleted函数即可。fromscrapy。pipelines。imagesimportImagesPipelinefromscrapy。exceptionsimportDropItemfromscrapyimportRequestclassScrapydemmoPipeline:defprocessitem(self,item,spider):returnitemclassImageDownloadPipeline(ImagesPipeline):defgetmediarequests(self,item,info):下载图片,如果传过来的是集合需要循环下载meta里面的数据是从spider获取,然后通过meta传递给下面方法:filepathyieldRequest(urlitem〔imageurl〕,meta{filename:item〔imagename〕})defitemcompleted(self,results,item,info):分析下载结果并剔除下载失败的图片imagepaths〔x〔path〕forok,xinresultsifok〕ifnotimagepaths:raiseDropItem(Itemcontainsnoimages)returnitemdeffilepath(self,request,responseNone,infoNone):接收上面meta传递过来的图片名称filenamerequest。meta〔filename〕returnfilenamegetmediarequests()。它的第一个参数item是爬取生成的Item对象。我们将它的url字段取出来,然后直接生成Request对象。此Request加入调度队列,等待被调度,执行下载。itemcompleted(),它是当单个Item完成下载时的处理方法。因为可能有个别图片未成功下载,所以需要分析下载结果并剔除下载失败的图片。该方法的第一个参数results就是该Item对应的下载结果,它是一个列表形式,列表每一个元素是一个元组,其中包含了下载成功或失败的信息。这里我们遍历下载结果找出所有成功的下载列表。如果列表为空,那么说明该Item对应的图片下载失败了,随即抛出异常DropItem,该Item忽略。否则返回该Item,说明此Item有效。
  以上两个函数即可下载图片了,图片名称为自动已哈希值命名,如:0db6e07054d966513f0a6f315b687f205c7ced90。jpg这种命名方式不友好,所以我们需要重写filepath函数,自定义图片名称。filepath():它的第一个参数request就是当前下载对应的Request对象。这个方法用来返回保存的文件名,接收上面meta传递过来的图片名称,将图片以原来的名称和定义格式进行保存。
  5、编写执行文件run。py运行
  在项目下新建run。py作为执行文件fromscrapyimportcmdlinecmdline。execute(scrapycrawlimagedownloadnolog。split())cmdline。execute(scrapycrawlimagedownload。split())
  运行此文件,执行结果,在目录下载第一页壁纸完成。
  六、小结
  除了ImagesPipeline处理图片外,还有FilesPipeline可以处理文件,使用方法与图片类似,事实上ImagesPipeline是FilesPipeline的子类,因为图片也是文件的一种。
  Scrapy很强大,对于大型网站非常实用,还可以同时运行多个爬虫程序,提升效率。Scrapy还有很多功能,可以自己研究。

老人吃隔夜菜突发脑炎进ICU,隔夜菜还能吃吗?详细跟你说一说一说隔夜菜,说法就多了,关于隔夜菜的各种言论,都会一涌而出,最多的莫过于隔夜菜不能吃,会有致癌的风险。再看到老人因吃隔夜菜住进了ICU,就会更加坚信隔夜菜不能吃了,是不是这样呢……大逆转!詹姆斯39分里程悲!湖人跌落第10,沃格尔三大严重问NBA最值得关注的一场比赛就是湖人队与鹈鹕队的生死战,在历经赛季末的隔空交手以争夺西部第九的位置后,他们之间已经不是冤家胜似冤家。客观来讲,这场湖人队108116不敌鹈鹕……旗舰之作vivoX80Pro来袭,vivoX70加速降价进行打造十年里程碑之作的新机vivoX80Pro爱不释手各种顶级配置,打造十年里程碑之作的新机vivoX80Pro爱不释手配置骁龙8Gen1和第二代自主研发芯片V1的双芯片性能,打……一个人电三轮房车旅行,电三轮加个太阳能板,也能当房车旅行?一个人电三轮房车旅行,今年开春,这次要去分乡镇南垭村了。本来去年就想去的,由于要过年了就没去。我车是靠太阳能板充电的,现在入春,阳光很充足了,很适合出行。南垭村油菜……路由器WiFi网速慢,多半是旁边放了这3样东西,难怪变卡顿路由器的旁边放置了一下这三种物品,会导致网速变得又慢又卡,好多人居然还不知道。赶紧跟着我一起来了解一下吧。一、金属物品首先先来了解一下路由器的工作原理,路由器所发射……男性长期不喝酒会有什么变化?别不相信,这几个现象或很明显导语:喝酒已经成为现代人的一种生活习惯,也成为社交场合的必需品,无论工作应酬还是朋友小聚,喝酒总是在所难免的,适当饮酒不仅可以拉近彼此间的感情,还能起到活跃气氛的作用。虽……辽宁有多美?看过才知道辽宁南临黄海、渤海地势北高南低,山地丘陵分列东西14。8万平方千米的土地上一山一水皆是风景2022年党的二十大即将召开过去十年辽宁在不……你们是星际种子和银河的地勤人员大家好!我们是大角星人理事会,很高兴与你们联系。我们在这个星系中生活了很长时间,我们已经能够与每个恒星系的生物建立联系,当然也包括你们。我们认为你们的恒星系,特别是你们的……春天的中国生机盎然祖国多地呈现出绝美的春日景象来源:央视网央视网消息:春天的中国,生机盎然。我们现在看到的是位于福建福州的闽江河口湿地国家级自然保护区。作为东亚澳大利西亚水鸟迁徙路线的重要组成部分,这里是鸟类迁徙的重……希罗巴特勒各取21分热火胜76人,哈登缺阵恩比德15中4在今日的常规赛中,热火主场9982胜76人。邓罗和巴特勒开局各中三分,邓罗再中三分、巴特勒突破暴扣,热火135领先。恩比德和巴特勒对飚得分,热火一度领先11分,不过节末丹……别盲目制止孩子玩游戏,玩游戏的3大好处,家长必须提前知道在我的28岁父母学习成长群里,一位5岁半男孩的妈妈提到一个问题:孩子最近喜欢站在爸爸身边看爸爸玩游戏,这个行为会不会对孩子造成影响?我可以肯定地说:非常有影响。……关于华为5G,阿联酋做出决定,这一次美国真的糗大了点击关注,每天精彩不断!导读:关于华为5G,阿联酋做出决定,这一次美国真的糗大了!自从5G网络被提出以后,就受到了世界各国的关注,如今很多国家都在快速的建设着5G网络,大……
江苏公布首批22家现代农业全产业链标准化基地人民网南京9月20日电日前,江苏公布了首批全省现代农业全产业链标准化基地名单,22家基地入选,13个设区市均有涉及。首批江苏省现代农业全产业链标准化基地涵盖鸡蛋、草莓、稻……深秋寒露丰收季,4类水果适合秋季食用随着气温逐渐降低,二十四节气已经不知不觉到了寒露时节。这时大雁南飞,北方的禽类渐渐减少了活动频率,而各种各样的菊花开始相继开放。秋季是丰收的季节,农谚有云黄烟花生也该收,起捕成……老好人的何炅,怎么走到了今天这般田地?1998年参加《快乐大本营》后的何炅,驻足娱乐圈二十几载。从天王刘德华、周杰伦到王俊凯、易烊千玺这种新生流量都参加过节目。可以说何炅是陪伴了我们的成长更见证了娱乐圈……他做到了从湖南科技大学保研清华大学,还是计算机专业探索知识的趣味与秘密他是超越标准范式的顶尖学霸穷尽科学的浪漫与奥义他是人工智能世界的头号玩家他是拿下清华大学offer的计算机学子张宇人物名……2022网络安全保险科技白皮书科技智绘网络安全保险新业态本文报告来源于《2022网络安全保险科技白皮书》报告,完整版共有39页,非常详尽,值得收藏。本报告下载领取方式详见文末本报告目录大纲如下:第一章全球网络安全保险发展……球鞋新鲜事Hyperdunk系列迎来复刻回归Hyperdunk系列迎来复刻回归?!NikeHyperdunkXJokic是的,你没看错,HDX在经历了一系列清库存的操作后,现在又非正式官宣了全新复刻计划。第一……隋东亮上任就激活一员大将,曾被视为离队大热门,未来将迎来爆发在刚刚结束的一场比赛中,北京国安最终以41大胜武汉长江队,这也是新帅隋东亮上任后的第一场比赛,因此非常渴望胜利。国安在过去遭遇了3连败,谢峰的执教能力遭到质疑,最终引咎辞职。而……POLO衫品味男人衣柜的必备单品作为休闲服饰历史上的经典传奇之一,POLO衫在男人的衣橱中一直享有很高的占有率。因为它既不像无领T恤那样过于随便,又不像衬衫那样呆板严肃,非常适合在带有商业性的娱乐场合穿……为什么肠道容易长息肉?如果肠内有息肉,身体会有什么症状?社会不断进步,人们的养生意识也在逐渐提高,当皮肤组织生出来一些多余的疙瘩或者是肿块时,总让人感觉到人心惶惶,及时去医院做检查,采取更科学的方法解决它。但在肠道内的息肉却很难被发……在火星玩转冬奥会,中国数字航天员新尝试1月28日,美国纽约时代广场的巨型液晶屏上滚动播出《准备进入北京冬奥会时间》主题宣传片。这是新华社联合国家航天局推出的冬奥创新产品,也是数字人小诤在应用场景落地方面的全新尝试。……5GAI助力矿业释放巨大数字潜力中新网11月9日电题:5GAI助力矿业释放巨大数字潜力中新财经记者刘育英记者9日从华为全联接大会2022获悉,华为的矿鸿操作系统商用一年,进入规模化复制阶段,5GA……如何选择MINILED电视电视行业从19年开始迸发了一个新兴的技术MINILED。从TCL的X10、X9、再到量产C12、到如今百花齐放的TCL的C11、C12E、X11、98X9CPRO、Q10G、T……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网