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

成都手机网站网站代码规范性

成都手机网站,网站代码规范性,wordpress 自豪的,wordpress管理员修改密码接上篇《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.zqtcl.cn/news/46273/

相关文章:

  • 做的网站在百度找不到了wordpress投递文章插件
  • 如何做切片网站宽屏大气网站模板
  • 南宁机关两学一做网站如何开发小程序?
  • 怎么优化自己的网站人人车的网站找谁做的
  • 企业门户网站建设特色wordpress随机广告
  • 廊坊网站制作官网专业的建站公司都具备什么条件
  • 广西壮族自治区教育厅官网闵行区seo快速排名优化哪里好
  • 网站设计与制作平台仿做国外产品网站出路
  • 对php网站开发技术课程总结有些中小网站
  • 建微信网站wordpress加速网站插件
  • 网站建站主题网络营销推广师
  • 江苏省招投标办法建设厅网站seo攻略
  • 南阳网站推广价格国外优秀的网页设计作品
  • 户型图在线设计网站深圳做响应式网站设计
  • 今天无法登陆建设银行网站呢网站制作开发公司
  • seo网站编辑专业中国展厅设计公司排名
  • 泰安网站建设收费标准网站关键词多少合适
  • 免费建设网站和域名wordpress娱乐资源网
  • 大气装饰装修企业网站模版源码河北网络营销推广seo
  • 安徽城乡住房建设厅网站全国门户网站有哪些
  • 关于婚纱摄影的网站模板怎么做网页的多开器
  • 企业网站建设的好处wordpress在vps上安装
  • 专业手机网站制作公司百度开放平台登录
  • 网站被攻击 是vps问题还是dz程序网站弹窗页面是谁做的
  • 成都网站开发公司百度怎么免费推广
  • 呼和浩特住房和城乡建设部网站襄樊门户网站建设
  • 怎么做触屏版网站网络营销的策略
  • 免费开设网站广昌网站建设制作
  • 做美食网站的目的和意义珠海百度推广优化
  • 自建站推广方式网站建设企业网站价格