Python爬虫程序设计KC43.pptx

上传人(卖家):三亚风情 文档编号:3573270 上传时间:2022-09-19 格式:PPTX 页数:15 大小:65.37KB
下载 相关 举报
Python爬虫程序设计KC43.pptx_第1页
第1页 / 共15页
Python爬虫程序设计KC43.pptx_第2页
第2页 / 共15页
Python爬虫程序设计KC43.pptx_第3页
第3页 / 共15页
Python爬虫程序设计KC43.pptx_第4页
第4页 / 共15页
Python爬虫程序设计KC43.pptx_第5页
第5页 / 共15页
点击查看更多>>
资源描述

1、4.3.1 建立建立Web网站网站4.3.1 建立建立Web网站网站这个网站有一个网页,返回基本计算机教材,flask程序如下:import flaskapp=flask.Flask(_name_)app.route(/)def index():html=Python程序设计 James 清华大学出版社 Java程序设计 Robert 人民邮电出版社 MySQL数据库 Steven 高等教育出版社 return html if _name_=_main_:app.run()4.3.2 编写数据项目类编写数据项目类4.3.2 编写数据项目类编写数据项目类程序要爬取的数据是多本教材,每本教材有名称

2、与作者,因此要建立一个教材的类,类中包含教材名称title、作者author与出版社publisher。在我们的scrapy框架中有的c:exampledemodemo目录下有一个文件items.py就是用来设计数据项目类的,打开这个文件,改造文件成如下形式:import scrapyclass BookItem(scrapy.Item):#define the fields for your item here like:title=scrapy.Field()author=scrapy.Field()publisher=scrapy.Field()其中BookItem是我们设计的教材项目类

3、,这个类必须从scrapy.Item类继承,在类中定义教材的字段项目,每个字段项目都是一个scrapy.Field对象,这里定义了3个字段项目,用来存储教材名称title、作者author、出版社publisher。如果item是一个BooItem的对象,那么可以通过itemtitle、itemauthor、itempublisher来获取与设置各个字段的值,例如:item=BookItem()itemtitle=Python程序设计itemauthor=Jamesitempublisher=清华大学出版社print(itemtitle)print(itemauthor)print(itemp

4、ublisher)4.3.3 编写爬虫程序编写爬虫程序mySpider4.3.3 编写爬虫程序编写爬虫程序mySpider数据的项目设计好后就可以编写爬虫程序如下:import scrapyfrom demo.items import BookItem class MySpider(scrapy.Spider):name=mySpider start_urls=http:/127.0.0.1:5000 def parse(self,response):try:data=response.body.decode()selector=scrapy.Selector(text=data)books=

5、selector.xpath(/book)for book in books:item=BookItem()itemtitle=book.xpath(./title/text().extract_first()itemauthor=book.xpath(./author/text().extract_first()itempublisher=book.xpath(./publisher/text().extract_first()yield item except Exception as err:print(err)这个程序访问http:/127.0.0.1:5000的网站,得到的网页包含教

6、材信息,程序过程如下:(1)from demo.items import BookItem从demo文件夹的items.py文件中引入BookItem类的定义。(2)data=response.body.decode()selector=scrapy.Selector(text=data)books=selector.xpath(/book)得到网站数据并建立Selector对象,搜索到所有的节点的元素。(3)for book in books:item=BookItem()itemtitle=book.xpath(./title/text().extract_first()itemautho

7、r=book.xpath(./author/text().extract_first()itempublisher=book.xpath(./publisher/text().extract_first()yield item对于每个节点,在它下面搜索到节点,取出它的文本即教材名称,其中注意使用book.xpath(./title/text()搜索到下面的节点的文本,一定不能缺少./的部分,它表示从当前节点往下搜索。同样道理搜索、节点的文本,它们组成一个BookItem对象,这个对象通过语句:yield item向上一级调用函数返回,接下来scrapy会把这个对象推送给与items.py同目录

8、下的pipelines.py文件中的数据管道执行类取处理数据。4.3.4 编写数据管道处理类编写数据管道处理类4.3.4 编写数据管道处理类编写数据管道处理类在我们的scrapy框架中有的c:exampledemodemo目录下有一个文件pipelines.py就是用来数据管道处理类文件,打开这个文件可以看到一个默认的管道类,修改并设计数据管道类如下:class BookPipeline(object):count=0 def process_item(self,item,spider):BookPipeline.count+=1 try:if BookPipeline.count=1:fob

9、j=open(books.txt,wt)else:fobj=open(books.txt,at)print(itemtitle,itemauthor,itempublisher)fobj.write(itemtitle+,+itemauthor+,+itempublisher+n)fobj.close()except Exception as err:print(err)return item这个类我们命名为BookPipeline,它继承自object类,类中最重要的函数是process_item函数,scrapy爬取数据开始时会建立一个BookPipeline类对象,然后每爬取一个数据类B

10、ookItem项目item,mySpider程序会把这个对象推送给BookPipeline对象,同时调用process_item函数一次。process_item函数的参数中的item就是推送来的数据,于是我们就可以在这个函数中保存爬取的数据了。注意scrapy要求process_item函数最后返回这个item对象。在我们这个程序中采用文件存储爬取的数据,BookPipeline类中先定义一个类成员count=0,用它来记录process_item调用的次数。如果是第一次调用(count=1)那么就使用语句fobj=open(books.txt,wt)新建立一个books.txt的文件,然后

11、把item的数据写到文件中。如果不是第一次调用(count1),就使用语句fobj=open(books.txt,at)打开已经存在的文件books.txt,把item的数据追加到文件中。这样我们反复执行爬虫程序的过程保证每次清除掉上次的数据,记录本次爬取的数据。4.3.5 设置设置scrapy的配置文件的配置文件我们说mySpider爬虫程序执行后每爬取一个item项目都会推送到BookPipelines类并调用的process_item函数,那么scrapy怎么样知道要这样做呢?前提是我们必须设置这样一个通道。在demo文件夹中有一个settings.py的设置文件,打开这个文件可以看到很

12、多设置项目,大部分是用#注释的语句,找到语句ITEM_PIPLINES的项目,把它设置成如下形式:#Configure item pipelines#See http:/scrapy.readthedocs.org/en/latest/topics/item-pipeline.html ITEM_PIPELINES=demo.pipelines.BookPipeline:300,其中ITEM_PIPLINES是一个字典,把关键字改成demo.pipelines.BookPipeline,而BookPipelines就是我们在pipelines.py文件中设计的数据管道类的名称,后面的300是一

13、个默认的整数,实际上它可以不是300,它可以是任何整数。这样设置后就连通了爬虫程序mySpider数据管道处理程序pipelines.py的通道,scrapy工作时会把mySpider爬虫程序通过yield返回的每项数据推送给pipelines.py程序的BoolPipeline类,并执行process_item函数,这样就可以保存数据了。总结:scrapy把数据爬取与数据存储分开处理,它们都是异步执行的,mySpider每爬取到一个数据项目item,就yield推送给pipelines.py程序存储,等待存储完毕后又再次爬取另外一个数据项目item,再次yield推送到pipelines.py程序,然后再次存储,.,这个过程一直进行下去,直到爬取过程结束,文件books.txt中就存储了所有的爬取数据了。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(Python爬虫程序设计KC43.pptx)为本站会员(三亚风情)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|