当前位置: 首页 > news >正文

安徽省住房和城乡建设部网站兰州网站优化seo

安徽省住房和城乡建设部网站,兰州网站优化seo,龙华网站建设方案案例,学习网站建设的网站接上篇《48、当当网Scrapy项目实战#xff08;一#xff09;》 上一篇我们正式开启了一个Scrapy爬虫项目的实战#xff0c;对当当网进行剖析和抓取。本篇我们继续编写该当当网的项目#xff0c;讲解刚刚编写的Spider与item之间的关系#xff0c;以及如何使用item#xff…接上篇《48、当当网Scrapy项目实战一》 上一篇我们正式开启了一个Scrapy爬虫项目的实战对当当网进行剖析和抓取。本篇我们继续编写该当当网的项目讲解刚刚编写的Spider与item之间的关系以及如何使用item以及使用pipelines管道进行数据下载的操作。 一、使用item封装数据 在上一篇我们通过编写的爬虫文件获取到当当网“一般管理类”书籍的第一页的明细列表信息。但是我们仅仅是将爬取到的目标信息print打印到控制台了没有保存下来这里我们就需要item先进行数据的封装。在“dang.py”爬虫文件里我们获取到了目标数据这些数据是我们之前通过item定义过这些数据的数据结构但是没有使用过 import scrapyclass ScrapyDangdang01Item(scrapy.Item):# 书籍图片src scrapy.Field()# 书籍名称title scrapy.Field()# 书籍作者search_book_author scrapy.Field()# 书籍价格price scrapy.Field()# 书籍简介detail scrapy.Field() 那么我们如何使用item定义好的数据结构呢我们在爬虫文件中首先通过from引用上面的class的名称 from scrapy_dangdang_01.items import ScrapyDangdang01Item 注可能编译器会报错这是编译器版本的问题不影响后面的执行可以忽略。 导入完毕之后我们创建一个book对象这个对象就是把上面那些零散的信息全部都组装起来的集合体然后在构造函数中将所有抓取到的属性挨个赋值到item文件中的各个属性中去 book ScrapyDangdang01Item(srcsrc, titletitle, search_book_authorsearch_book_author, priceprice, detaildetail) 然后这个book对象就要交给pipelines进行下载。 二、设置yield返回目标对象 这里我们需要使用到Python中的yield指令它的作用如下 yield是Python中的一个关键字主要用于定义生成器generator。生成器是一种特殊的迭代器可以逐个地生成并返回一系列的值而不是一次性地生成所有的值。这可以节省大量的内存尤其是在处理大量数据时。         yield的工作原理类似于return但它不仅仅返回一个值还可以保存生成器的状态使得函数在下次调用时可以从上次离开的地方继续执行。 下面是一个简单的生成器函数的例子 def simple_generator():  n 1  while n 5:  yield n  n 1  for i in simple_generator():  print(i)         在这个例子中simple_generator 是一个生成器函数它使用 yield 来生成一系列的数字。当我们对这个生成器进行迭代例如在 for 循环中时它会逐个生成数字 1 到 5并打印出来。 所以我们这里使用yield是用来将上面for循环中的每一个book交给pipelines处理循环一个处理一个。编写代码如下 # 将数据封装到item对象中 book ScrapyDangdang01Item(srcsrc, titletitle, search_book_authorsearch_book_author, priceprice, detaildetail)# 获取一个book对象就将该对象交给pipelines yield book 此时for循环每执行一次爬虫函数就会返回一个封装好的book对象。完整的爬虫文件代码如下scrapy_dangdang_01/scrapy_dangdang_01/spiders/dang.py import scrapyfrom scrapy_dangdang_01.items import ScrapyDangdang01Itemclass DangSpider(scrapy.Spider):name dangallowed_domains [category.dangdang.com]start_urls [http://category.dangdang.com/cp01.22.01.00.00.00.html]def parse(self, response):# 获取所有的图书列表对象li_list response.xpath(//ul[idcomponent_59]/li)# 遍历li列表获取每一个li元素的几个值for li in li_list:# 书籍图片src li.xpath(.//img/data-original).extract_first()# 第一张图片没有data-original属性所以会获取到控制此时需要获取src属性值if src:src srcelse:src li.xpath(.//img/src).extract_first()# 书籍名称title li.xpath(.//img/alt).extract_first()# 书籍作者search_book_author li.xpath(./p[classsearch_book_author]//span[1]//a[1]/title).extract_first()# 书籍价格price li.xpath(./p[classprice]//span[classsearch_now_price]/text()).extract_first()# 书籍简介detail li.xpath(./p[classdetail]/text()).extract_first()# print()# print(【图片地址】, src)# print(【书籍标题】, title)# print(【书籍作者】, search_book_author)# print(【书籍价格】, price)# print(【书籍简介】, detail)# 将数据封装到item对象中book ScrapyDangdang01Item(srcsrc, titletitle, search_book_authorsearch_book_author, priceprice, detaildetail)# 获取一个book对象就将该对象交给pipelinesyield book 三、编写pipelines保存数据至本地 首先我们进入setting.py中设置“ITEM_PIPELINES”参数在其中添加我们设置的pipelines管道文件的路径地址 # 管道可以有很多个前面是管道名后面是管道优先级优先级的范围是1到1000值越小优先级越高 ITEM_PIPELINES {scrapy_dangdang_01.pipelines.ScrapyDangdang01Pipeline: 300, } 此时我们进入pipelines.py中编写管道逻辑 from itemadapter import ItemAdapter# 如果需要使用管道要在setting.py中打开ITEM_PIPELINES参数 class ScrapyDangdang01Pipeline:# process_item函数中的item就是爬虫文件yield的book对象def process_item(self, item, spider):# 这里写入文件需要用a追加模式而不是w写入模式因为写入模式会覆盖之前写的with open(book.json, a, encodingutf-8) as fp:# write方法必须写一个字符串而不能是其他的对象fp.write(str(item))return item 此时我们执行爬虫函数可以看到执行成功 然后我们打开生成的book.json文件“CtrlAltl”排版之后可以看到我们爬取的数据已经生成了 上面就是管道爬虫item的综合使用模式。 四、进行必要的优化 在上面的pipelines管道函数中我们每一次获取到爬虫for循环yield的book对象时都需要打开一次文件进行写入比较耗费读写资源对文件的操作过于频繁。 优化方案在爬虫执行开始的时候就打开文件爬虫执行结束之后再关闭文件。此时我们就需要了解pipelines的生命周期函数。分别为以下几个方法 1open_spider(self, spider): 当爬虫开始时这个方法会被调用。你可以在这里进行一些初始化的操作比如打开文件、建立数据库连接等。 2close_spider(self, spider): 当爬虫结束时这个方法会被调用。你可以在这里进行清理操作比如关闭文件、断开数据库连接等。 3process_item(self, item, spider): 这是pipelines中最核心的方法。每个被抓取并返回的项目都会经过这个方法。你可以在这里对数据进行清洗、验证、转换等操作。这个方法必须返回一个项目可以是原项目也可以是经过处理的新项目或者抛出一个DropItem异常表示该项目不应被进一步处理。 此时我们就可以使用open_spider定义爬虫开始时打开文件close_spider定义爬虫结束时关闭文件而在爬虫运行期间的process_item方法中只进行写的操作完整代码如下 from itemadapter import ItemAdapter import json# 如果需要使用管道要在setting.py中打开ITEM_PIPELINES参数 class ScrapyDangdang01Pipeline:# 1、在爬虫文件开始执行前执行的方法def open_spider(self,spider):print(爬虫开始)# 这里写入文件需要用a追加模式而不是w写入模式因为写入模式会覆盖之前写的self.fp open(book.json, a, encodingutf-8) # 打开文件写入# 2、爬虫文件执行时返回数据时执行的方法# process_item函数中的item就是爬虫文件yield的book对象def process_item(self, item, spider):# write方法必须写一个字符串而不能是其他的对象self.fp.write(str(item)) # 将爬取信息写入文件return item# 在爬虫文件开始执行后执行的方法def close_spider(self, spider):print(爬虫结束)self.fp.close() # 关闭文件写入 这样就能解决对文件操作频繁耗费读写资源的问题了。 五、多管道的支持 pipelines支持设置多个管道例如我们在原来的pipelines.py中再定义一个管道class类用来下载每一个图书的图片 # 下载爬取到的book对象中的图片文件 class ScrapyDangdangImagesPipeline:def process_item(self, item, spider):# 获取book的src属性并按照地址下载图片保存值books文件夹下url http: item.get(src)filename ./books/ item.get(title) .jpg# 检查并创建目录if not os.path.exists(./books/):os.makedirs(./books/)urllib.request.urlretrieve(urlurl, filenamefilename)return item 然后我们在setting.py中的ITEM_PIPELINES参数中追加这个管道 # 管道可以有很多个前面是管道名后面是管道优先级优先级的范围是1到1000值越小优先级越高 ITEM_PIPELINES {scrapy_dangdang_01.pipelines.ScrapyDangdang01Pipeline: 300,scrapy_dangdang_01.pipelines.ScrapyDangdangImagesPipeline: 301 } 运行爬虫文件可以看到相关的图片已经全部下载下来 并且都是可以打开的图片 至此管道爬虫item的综合使用模式讲解完毕。下一篇我们来讲解Scrapy的多页面下载如何实现。 参考尚硅谷Python爬虫教程小白零基础速通转载请注明出处https://guangzai.blog.csdn.net/article/details/136283532
http://www.w-s-a.com/news/638344/

相关文章:

  • 百度网站标题东莞外包公司有哪些
  • 织梦增加网站英文名称网页界面设计特点
  • 企业如何进行网站建设棋牌代理平台
  • 韩国做美食网站有哪些seo优化在线诊断
  • 网站建设规划模板做擦边网站
  • 做网站台式还是笔记本网上下载的免费网站模板怎么用
  • 高校网站群管理系统凡科建站是永久的吗
  • 深圳网站建设服务电话网站通栏设计素材
  • 网站里面的视频功能怎么做网站名注册
  • 网站游戏下载厦门php网站建设
  • 沈阳关键词网站排名一台服务器做两个网站吗
  • 哪个行业该做网站但是没有做dom手表官方网站
  • 网站建设费 大创wordpress中函数get
  • 怎样建设个自己的网站首页有没有专门教做扯面的网站
  • 网站后台怎么添加模板教育类网站开发公司
  • 网站的外链是什么php创建一个网站
  • 语文建设 官方网站网络工程可以从事什么工作
  • 无锡便宜做网站如何下载网站模板
  • 南宁高端网站网络小说网站推广策划方案
  • 苏州网站制作方法建设银行 网站
  • 技术网站推广范例素材网站哪个好
  • 网站找人做的他能登管理员吗网站建设一般多少钱
  • 衡水哪有做网站的wordpress主题站主题
  • 网络建设的流程网站公司注册资本
  • 杭州旅游团购网站建设建立一个网站需要哪些步骤
  • 实木餐桌椅网站建设浦东网站建设哪家好
  • 高端手机网站定制网站网络推广推广
  • 做网站的颜色大学网站群建设方案
  • 淄博学校网站建设哪家好网站集约化建设规范
  • 专业论坛网站有哪些如何制作h5页面视频