游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

手把手教你使用scrapy框架来爬取北京新发地价格行情(理论

  来源:Python爬虫与数据挖掘
  作者:霖hero
  大家好!我是霖hero。上个月的时候,我写了一篇关于IP代理的文章,手把手教你使用XPath爬取免费代理IP,今天在这里分享我的第二篇文章,希望大家可以喜欢。前言
  有一天,我在逛街,突然被一声靓仔打断了我的脚步,回头一看,原来是水果摊阿姨叫我买水果,说我那么靓仔,便宜一点买给我,自恋的我无法拒绝阿姨的一声声靓仔,于是买了很多水果回家,家人问我水果多少钱,结果如何,没错,水果买贵了!今天我们使用scrapy框架来爬取北京新发地价格行情,了解商品价格,家人再也不怕我买贵东西啦。Scrapy简介
  在爬取之前,我们先来学习一下什么Scrapy框架。
  Scrapy是一个基于Twisted的异步处理框架,是纯Python实现的爬虫框架,是提取结构性数据而编写的应用框架,其架构清晰,模块之间的耦合程度低,可扩展性极强,我们只需要少量的代码就能够快速抓取数据。Scrapy框架介绍
  首先我们看看经典的Scrapy框架架构图,如下图所示:
  学Scrapy框架的绝大部分都看过这个图,图中分了很多部分,接下来,我们通过下面的表来简单地了解各个部分的作用。
  名称
  作用
  是否要手写代码
  Engine
  引擎,负责数据和信号的在不同模块间的传递。
  否
  Scheduler
  调度器,存放引擎发过来的requests请求,在引擎再次请求的时候将请求提供给引擎。
  否
  Downloader
  下载器,下载网页响应的内容并将内容返回给引擎。
  否
  Spiders
  爬虫,处理引擎传过来的网页内容并提取数据、url,并返回给引擎。
  是
  ItemPipeline
  管道,处理引擎传过来的数据,主要任务是清洗、验证和存储数据。
  是
  DownloaderMiddlewares
  下载器中间件,位于引擎和下载器之间的桥梁框架,主要是处理引擎与下载器之间的请求及响应,可以自定义下载扩展,如设置代理。
  一般不用手写
  SpiderMiddlewaresSpider
  中间件,位于引擎和爬虫之间的桥梁框架,主要处理向爬虫输入的响应和输出的结果及新的请求。
  一般不用手写
  在表中,我们可以发现,每部分都要经过引擎,上图中ScrapyEngine部分也是放在正中心,由此可知,Engine引擎是整个框架的核心。
  注意:这些模块部分只有Spiders和ItemPipeline需要我们自己手写代码,其他的大部分都不需要。Scrapy项目
  大致了解了Scrapy框架的各个部分后,接下来我们开始创建一个Scrapy项目,可以使用如下命令:scrapystartprojectScrapy项目名
  创建一个scrapy项目名为test1的项目,如下图所示:
  这样我们就创建好Scrapy项目了,如下图所示:
  其中:spiders:存放spiders的文件夹;items。py:Items的定义,定义爬取的数据结构;middlewares。py:项目中间件文件,定义爬取时的中间件;pipelines。py:项目管道文件,定义数据管道;settings:项目设置文件;scrapy。cfg:Scrapy部署配置文件。Spider爬虫创建spider爬虫
  要创建Spider爬虫,首先我们要进入刚才创建的Scrapy目录中,再在命令行运行以下命令:scrapygenspider爬虫名字允许爬取的域名
  以http:quotes。toscrape。com
  网站为例子,该网站是一个著名作家名言的网站,创建Spider爬虫如下图所示:
  创建spider爬虫后,spiders文件夹中多了一个firstspider。py,这个py文件就是我们创建爬虫,文件内容如下所示:importscrapyclassFirstspiderSpider(scrapy。Spider):namefirstSpideralloweddomains〔quotes。toscrape。com〕starturls〔http:quotes。toscrape。com〕defparse(self,response):pass
  其中:classFirstspiderSpider()是自定义spider类,继承自scrapy。Spidername是定义此爬虫名称的字符串,每个项目唯一的名字,用来区分不同的Spider,启动爬虫时使用scrapycrawl该爬虫名字;alloweddomains是允许爬取的域名,防止爬虫爬到其他网站;starturls是最开始爬取的url;parse()方法是负责解析返回响应、提取数据或进一步生成要处理的请求,注意:不能修改这个方法的名字。parse()提取数据并启动爬虫
  大致了解了firstspider。py文件内容后,我们接下来尝试在parse()方法中提取响应的数据,具体代码如下所示:xpathparseresponse。xpath(htmlbodyp〔1〕p〔2〕p〔1〕p)forxpathinxpathparse:item{}item〔text〕xpath。xpath(。span〔1〕text())。extractfirst()。replace(,)。replace(,)item〔author〕xpath。xpath(。span〔2〕smalltext())。extractfirst()print(item)
  这样我们就成功提取到引擎响应的内容数据了,接着输入以下命令来运行spider爬虫:scrapycrawlfirstSpider
  运行结果如下:
  运行后发现我们结果里面多了很多log日志,这时可以通过在settings。py添加以下代码,就可以屏蔽这些log日志:LOGLEVELWARNING
  这样就可以直接输入我们想要的内容,如下图所示:
  有人可能问:那UserAgent在哪里设置?
  我们可以在settings。py中设置UserAgent,代码如下所示:
  items。py介绍
  为了避免拼写错误或者定义字段错误,我们可以在items。py文件中定义好字段,在上面提取数据中,我们获取了text、author内容,所以我们可以在items。py定义text和author字段,具体代码如下所示:importscrapyclassTest1Item(scrapy。Item):textscrapy。Field()authorscrapy。Field()
  在items。py文件中,我们只需要使用scrapy。Field()来进行定义即可,scrapy。Field()是一个字典,总的来说我们可以把该类理解为一个字典。
  接着在firstspider。py文件中导入我们的items。py,以及修改item{},如下所示:fromtest1。itemsimportTest1ItemitemTest1Item()
  有人可能会说为什么要多此一举定义一个字典呢?
  当我们在获取到数据的时候,使用不同的item来存放不同的数据,在把数据交给pipeline的时候,可以通过isinstance(item,Test1Item)来判断数据属于哪个item,进行不同的数据(item)处理。
  例如我们获取到京东、淘宝、拼多多的数据时,我们可以items。py文件中定义好对应的字段,具体代码如下:importscrapyclassjingdongItem(scrapy。Item):textscrapy。Field()authorscrapy。Field()classtaobaoItem(scrapy。Item):textscrapy。Field()authorscrapy。Field()classpddItem(scrapy。Item):textscrapy。Field()authorscrapy。Field()
  定义好字段后,这是我们通过在pipeline。py文件中编写代码,对不同的item数据进行区分,具体代码如下:fromtest1。itemsimportjingdongItemclassTest1Pipeline:defprocessitem(self,item,spider):ifisinstance(item,jingdongItem):print(item)
  首先我们通过导入我们的items。py,通过isinstance()函数来就可以成功获取到对应的item数据了。pipelines。py介绍
  ItemPipeline为项目管道,当Item生成后,它就会自动被送到ItemPipeline进行处理,我们常用ItemPipeline来做以下操作:清理HTML数据;验证爬取数据,检测爬取字段;查看并丢弃重复内容;将爬取结果保存到数据库。
  pipelines。py内容如下所示:fromitemadapterimportItemAdapterclassTest1Pipeline:defprocessitem(self,item,spider):returnitem
  在processitem()方法中,传入了两个参数,一个参数是item,每次Spider生成的Item都会作为参数传递过来。另一个参数是spider,就是Spider的示例。
  完成pipeline代码后,需要在setting。py中设置开启,开启方式很简单,只要把setting。py内容中的以下代码的注释取消即可:ITEMPIPELINES{test1。pipelines。Test1Pipeline:300,}
  其中:test1。pipelines。Test1Pipeline是pipeline的位置;300是pipeline的权重。
  注意:pipeline的权重越小优先级越高;pipeline中的processitem()方法名不能修改为其他的名称;pipeline能够定义多个。
  当我们有多个spider爬虫时,为了满足不同的spider爬虫需求,这时可以定义不同的pipeline处理不同的item内容;
  当一个spider的内容可能要做不同的操作时,例如存入不同的数据库中,这时可以定义不同的pipeline处理不同的item操作。
  例如当我们有多个spider爬虫时,可以通过pipeline。py编写代码定义多个pipeline,具体代码如下:classjingdongPipeline1:defprocessitem(self,item,spider):ifspider。namejingdong:print(item)returnitemclasstaobaoPipeline:defprocessitem(self,item,spider):ifspider。nametaobao:print(item)returnitem
  这样我们就可以处理到对应的spider爬虫传递过来的数据了。
  定义好pipeline后,我们要在settings。py中设置pipeline权重,也就是那个pipeline先运行,具体代码如下:ITEMPIPELINES{test1。pipelines。jingdongPipeline:300,test1。pipelines。taobaoPipeline:301,}数据传输到pipeline中
  在上面我们已经提取到想要的数据,接下来将数据传到pipeline中,传输很简单,我们只需要使用yield,代码如下:yielditem
  没错,只要在spider爬虫中写入这一行代码即可,那么为什么要使用yield呢?,我用return不能行吗?
  行,但yield是让整个函数变成一个生成器,每次遍历的时候挨个读到内存中,这样不会导致内存的占用量瞬间变高。实现翻页
  我们成功获取到了一页数据了,那么问题来了,如何实现翻页呢,方法有很多种,我们主要介绍两种。第一种:使用startrequests()方法
  我们通过在spider爬虫中,也就是我们创建的firstspider。py中添加以下代码,具体代码如下:defstartrequests(self):foriinrange(1,3):urlfhttps:quotes。toscrape。compage{i}yieldscrapy。Request(urlurl,callbackself。parse)第二种:在parse()方法中实现翻页
  我们可以通过parse()方法中实现翻页,具体代码如下:foriinrange(2,3):urlfhttps:quotes。toscrape。compage{i}yieldscrapy。Request(urlurl,callbackself。parse)
  大家可以发现,上面两种翻页方式都差不多,只是一个在startrequests()方法实现,一个在parse()方法实现。
  但都要使用scrapy。Request()方法,该方法能构建一个requests,同时指定提取数据的callback函数scrapy。Requeset(url,callback,methodGET,headers,cookies,meta,dontfilterFalse)
  其中:url:表示爬取的url链接;callback:指定传入的url交给哪个解析函数去处理;headers:请求头;cookies:用于识别用户身份、进行回话跟踪而存储在用户本地终端上的数据;meta:实现在不同的解析函数中传递数据;dontfilter:让scrapy的去重不会过滤当前url,scrapy默认有url去重的功能。保存数据
  我们已经获取到数据而且实现了翻页,接下来是保存数据。
  保存在文件中
  当我们要把数据保存成文件的时候,不需要任何额外的代码,只要执行如下代码即可:scrapycrawlspider爬虫名oxxx。json保存为JSON文件scrapycrawlspider爬虫名oxxx。jl或jsonlines每个Item输出一行jsonscrapycrawlspider爬虫名oxxx。csv保存为csv文件scrapycrawlspider爬虫名oxxx。xml保存为xml文件
  想要保存为什么格式的文件,只要修改后缀就可以了,在这里我就不一一例举了。
  保存MongoDB中
  当我们要把数据保存在MongoDB数据库的时候,就要使用ItemPipeline模块了,也就是说要在pipeline。py中编写代码,具体代码如下所示:frompymongoimportMongoClientclientMongoClient()collectionclient〔test1〕〔firstspider〕classTest1Pipeline:defprocessitem(self,item,spider):collection。insert(item)returnitem
  首先我们导入MongoClient模块并实例化MongoClient,创建一个集合,然后在processitem()方法中使用insert()方法把数据插入MongoDB数据库中。
  好了,Scrapy知识就讲到这里,下一篇文章小编将带大家爬取北京新发地价格行情,顺便巩固我们今天学的知识。总结
  大家好,我是霖hero。这篇文章主要给大家分享了Scrapy框架的条条框框,Scrapy是一个基于Twisted的异步处理框架,是纯Python实现的爬虫框架,是提取结构性数据而编写的应用框架,其架构清晰,模块之间的耦合程度低,可扩展性极强。

黄晓明鬓边不是海棠红今日开播饰演爱国商人程凤台引热议今日,由惠楷栋执导,改编自水如天儿同名网络小说的电视剧《鬓边不是海棠红》在观众热切的期盼中迎来正式开播。该剧由黄晓明领衔主演,他饰演一名痴迷京剧、俊逸倜傥的爱国商人程凤台。在民……比苹果12还香的3款手机,等等党绝对胜利,国产也许真的不逊色在上个星期,iPhone12的开售可以说是苹果11年来,热度最低的一款了,而且一上线就是全网骂,没高刷,没充电器,没续航等等问题,让我以为iPhone12的销量绝对爆冷,结果真……九州天空城2今日开播徐正溪帅气古颜制霸荧屏今晚八点,由徐正溪、王玉雯领衔主演的古装奇幻爱情剧《九州天空城2》独家登陆腾讯视频正式开播,每周四到周日连播三天,剧迷们不要错过!自预告片发布后,由徐正溪饰演的雪景空随即引发网……谢霆锋弹拨片将成名场面我们的乐队试听会今日上线《我们的乐队》第一期已于上周六登陆江苏卫视及芒果TV,优秀的乐手加强大的合伙人阵容,播出当日便在各平台引起热议。节目中,谢霆锋以总裁身份热血组乐队、做音乐,主题曲表演时的吉他s……5个摄像头15颗雷达全新明锐PRO12。49万起售距离上海车展首发一周后,上汽大众斯柯达全新明锐PRO于5月17日正式上市。新车推出4款车型,售价区间为12。49万15。79万元。全新明锐PRO是斯柯达品牌旗下首款采用全……与英伟达市值相差1。5万亿,芯片巨头英特尔前景如何?文杨剑勇英特尔与英伟达,作为全球两大芯片巨头,一个是CPU领导者、一个是GPU领导厂商。但在资本市场,显然英伟达更深受投资者青睐,且市值屡创新高。截止6月18日,英伟达市……九州天空城2发布预热徐正溪再演古装男神星关系3月13日讯今日,由徐正溪、王玉雯领衔主演的古装奇幻爱情剧《九州天空城2》发布群像海报及首支预告片。片中,徐正溪饰演男主角雪景空身穿黑衣亮相,抬眸间眼中饱含深情;白衣也尽……SNH487SENSES亮相青你2呈现飒燃舞台3月12日,爱奇艺青年励志综艺《青春有你2》正式开播。备受关注的SNH48国际小分队7SENSES成员首期即迎来亮相,以《whoisyourgirl》的原创舞台燃炸现场,展现出……地球脸红了收官爱奇艺上戏联动培养行业人才爱奇艺和上戏首次合作实验网剧《地球脸红了》于本周会员圆满收官,剧中苗宇(杨仕泽饰)汪晨(张令仪饰)从相识和对方宠物关联,不得不依赖彼此,到相互了解暗生情愫,历经重重考验,两人终……黄晓明鬓边不是海棠红先导预告上线爱国商人程凤台引发热议由黄晓明主演的《鬓边不是海棠红》今日释出先导预告,精致的民国扮相和生动的表情演技让不少网友沉浸在了那段北平梨园往事中,随之更加期待起了这部剧,表示想早日真正看到这部剧还原的民国……婚前21天开播!吴尊为妻子手绘童话书发布会回应质疑今天,国内首档夫妻婚礼筹备观察纪实节目《婚前21天》先导片在芒果tv独家上线,被称为初恋夫妇的吴尊林丽吟正式开启属于他们的浪漫故事。首期节目先导片内容满满,初恋夫妇开篇就……B站小主安康宠物医院2启动双城进阶模式医生上演30秒生死营救3月10日,由哔哩哔哩出品、瀚叶传媒及大桔文创联合出品的国内首档宠物医疗观察类真人秀B站《小主安康宠物医院2》正式暖心回归。在首期的节目中,骨折的小仓鼠、患有癫痫的法斗、人见人……
联想官宣ThinkPadP1隐士202116英寸4K屏干掉色对于一个创意工作者来说,经常处在图像编辑、影视剪辑、模型渲染等工作场景中,对生产力工具有着极高的要求,一款优秀的移动工作站必须要拥有强大的硬件性能和算力来保证处理影像时更加精准……2021胡润世界500强发布腾讯阿里优势仍在,快手新上榜8月20日,资本邦了解到,胡润研究院今日发布胡润世界500强榜单,上榜企业总价值比去年增长50万亿,达到375万亿。其中,美国企业增长了32万亿;其次是中国和瑞士,都增长……为什么建议伴有听力损失的耳鸣患者使用助听器?助听器有掩蔽耳鸣的作用,效果也是因人而异,建议还是到专业的听力中心,试听,对听听力损失,助听器的及时干预,效果还是不错的助听器能够有效的掩盖一部分耳鸣,它是辅助工具,帮助……iQOO的价格公布后,魅族将受最大冲击,其次才是小米昨天,vivo旗下子品牌iQOO发布新手机,价格公布之后,网友们首先想到的是小米,因为iQOO的起步价刚好比小米9便宜了1块钱。明眼人一看就知道iQOO这次是把小米9当作自己的……11。11错过必后悔的实惠1TBM。2NVMe固态硬盘只需3在工作中,相信有不少的人都会为了运行缓慢而着急,明明卡顿时间没有多久,但是在工作的时候运行缓慢和卡顿就是会影响自己的工作心情和降低工作效率。电脑用久了,硬件出现老坏的情况是很常……技术解读思必驰DUI标注训练一体化平台,语音识别全场景覆盖坊间总会流传些他们的段子格子衫、双肩包、沉默且不苟言笑当然,还有岌岌可危的发量(没有,不是我说的)那只能说,这些都是表象堪称新时代的中流砥柱每天家……行业大咖齐聚长安新能源汽车技术论坛,共话产业未来发展8月24日,作为2021中国国际智能产业博览会系列活动之一的长安汽车科技生态大会盛大开幕。会上,长安汽车发布了新汽车新生态战略等重磅内容。大会分论坛新能源汽车技术论坛于8月25……标配空悬售价34。86万元岚图FREE纯电城市版正式上市10月31日,岚图FREE纯电城市版正式上市,售价34。86万元,限量发售888台。岚图FREE纯电城市版号称无需选配的豪华,是30万级SUV中唯一标配空气悬架的车型。岚图FR……学Python还是Java更好找工作?编程语言社区TIOBE今日发布了12月份的编程语言排行榜。12月C语言排名第一,Java降至第二位,Python排列第三。Python使用率从2108年快速攀升。作为一门……关于全向组海韵三队提交的RTThread技术报告中的若干疑点简介:本文内容是在8月13日邮件接收到参加全国大学生智能车竞赛同学写来的一封邮件。其中对于公开的山东大学(威海)全向组提交的RTThread技术报告中所产生的若干疑点。针对于竞……这4个手机功能看似鸡肋,实际上大有用处,体验之后都说好写在开头手机已经成为了我们生活中必不可少的工具,为了更好的服务用户,手机厂商在软硬件层面也不断推陈出新。然而不少手机新功能看起来可有可无,其实它们都大有用处。今天来介绍买……摩托罗拉G505G手机海外发布联发科天玑700芯片加持早在2021年4月份的时候,联想旗下的摩托罗拉手机,在国内智能手机市场发布了MotoG50手机。按照介绍,这款智能手机采用6。5英寸的MaxVisionHD屏,该屏幕的分辨率为……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网