解析后返回可迭代对象

  • 这个对象返回以后就会被爬虫重新接收,然后进行迭代
  • 通过scrapy crawl budejie -o xx.josn/xx.xml/xx.csv 将迭代数据输出到json、xml或者csv格式的外部文件中
  • 如果管道开启,则每迭代一次数据就会将其输入到管道中(在settings文件中可以开启管道)

1. budejie.py 文件

  def parse(self, response):
         # 这个函数是解析函数,它是通过下载来回调,下载器下载完成一个url数据以后就会回调这个函数并且把下载的响应对象通过response参数传递过来
         print(response)
         # 解析response
         contents = response.xpath("//div[@class='j-r-list']/ul/li") # scrapy中自带xpath和css两种解析方法
         # print(contents)
         for content in contents:
             item = {}
             item["author"] = content.xpath(".//a[@class='u-user-name']/text()").extract()[0]
             # scrapy的xpath和css方法中返回出来的是一个Selector对象列表,我们需要用extract函数将内容从这个对象中提取出来
             item["authorImg"] = content.xpath(".//img[@class='u-logo lazy']/@data-original").extract()[0]
             item["content"] = content.xpath(".//div[@class='j-r-list-c-desc']/a/text()").extract()[0]
             item["imgSrc"] = content.xpath(".//img[@class='lazy']/@data-original").extract()[0]
             # print(item)

             yield item  # 每一个解析函数最后都要返回出去一个可迭代的对象
             # 这个对象返回以后就会被爬虫重新接收,然后进行迭代
             # 通过scrapy crawl budejie -o xx.josn/xx.xml/xx.csv 将迭代数据输出到json、xml或者csv格式的外部文件中
             # 如果管道开启,则每迭代一次数据就会将其输入到管道中(在settings文件中可以开启管道)

开启管道,将迭代的对象传入管道

  • 在setting.py 文件中开启管道(67--69行)
 ITEM_PIPELINES = {
    'MyFirstScrapy.pipelines.MyfirstscrapyPipeline': 300,
     # settings文件中可以配置相关的组件,其中ITEM_PIPELINES就是其中的一种组件(即管道组件),管道组件的值是一个字典,代表可以设置多个值
     # 字典中的一个键值对就代表着一个管道组件,键代表当前管道组件的位置,值代表当前管道组件的优先级(数字越小优先级越大)

     # 数据会按照管道优先级,从高向低传递
     'MyFirstScrapy.pipelines.CSVPipeline': 200

 }

MyfirstscrapyPipeline 管道类

  • 在pipelines.py 文件中 声明、设置管道类
 class MyfirstscrapyPipeline(object):
   # 这个类集成自一个普通类,但是如果我们把它加入到管道组件中就变成了一个管道类

     # 一个管道类有以下三个生命周期函数
     def open_spider(self,spider):
         print("爬虫开启")
         print("当前开启的爬虫为:",spider)
         # 创建一个redis链接
         self.rds = redis.StrictRedis(host="www.fanjianbo.com",port=6379,db=8)

     def process_item(self, item, spider):
       # 当爬虫解析完数据以后,这个方法去迭代返回到管道中数据
         print("爬虫正在迭代数据...")
         print("当前正在%s爬虫迭代的数据是:%s"%(spider,item))
         # 向redis数据库中存入数据
         self.rds.lpush("budejie",item)
         return item
         # 每迭代一次以后,一定将迭代过的数据return出去

     def close_spider(self,spider):
         print("爬虫%s关闭!"%spider)

 # 声明一个管道类,用于写csv数据
 class CSVPipeline(object):
     def open_spider(self,spider):
         # 打开csv文件
         self.csvfile = open("data.csv","a+",newline='',encoding="utf-8")
         self.writer = csv.writer(self.csvfile)
         self.writer.writerow(["author","authorImg","content","imgSrc"])

     def process_item(self,item,spider):
         vals = []
         for k,v in item.items():
             vals.append(v)
         self.writer.writerow(vals)
         return item
         # 如果优先级高的管道跌打完数据以后不返回出去,
         # 这个数据就会销毁,后面的管道就无法使用该数据

     def close_spider(self,spider):
         self.csvfile.close()

爬虫框架Scrapy 之(四) --- scrapy运行原理(管道)的更多相关文章

  1. Golang 网络爬虫框架gocolly/colly 四

    Golang 网络爬虫框架gocolly/colly 四 爬虫靠演技,表演得越像浏览器,抓取数据越容易,这是我多年爬虫经验的感悟.回顾下个人的爬虫经历,共分三个阶段:第一阶段,09年左右开始接触爬虫, ...

  2. Scrapy爬虫框架教程(四)-- 抓取AJAX异步加载网页

    欢迎关注博主主页,学习python视频资源,还有大量免费python经典文章 sklearn实战-乳腺癌细胞数据挖掘 https://study.163.com/course/introduction ...

  3. Scrapy基础(四)————Scrapy的使用Pycharm进行Debuge设置

    好比Django的Debuge 与前端进行交互时的方便,但是Scrapy 不自带,所以我们写一个main文件来debuge 作用:通过cmd 命令启动爬虫 #-*-coding:utf-8 -*- # ...

  4. python爬虫框架(3)--Scrapy框架安装配置

    1.安装python并将scripts配置进环境变量中 2.安装pywin32 在windows下,必须安装pywin32,安装地址:http://sourceforge.net/projects/p ...

  5. 【网络爬虫】【python】网络爬虫(四):scrapy爬虫框架(架构、win/linux安装、文件结构)

    scrapy框架的学习,目前个人觉得比较详尽的资料主要有两个: 1.官方教程文档.scrapy的github wiki: 2.一个很好的scrapy中文文档:http://scrapy-chs.rea ...

  6. 一篇文章教会你理解Scrapy网络爬虫框架的工作原理和数据采集过程

    今天小编给大家详细的讲解一下Scrapy爬虫框架,希望对大家的学习有帮助. 1.Scrapy爬虫框架 Scrapy是一个使用Python编程语言编写的爬虫框架,任何人都可以根据自己的需求进行修改,并且 ...

  7. 四: scrapy爬虫框架

    5.爬虫系列之scrapy框架   一 scrapy框架简介 1 介绍 (1) 什么是Scrapy? Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,非常出名,非常强悍.所谓的框架 ...

  8. 小白学 Python 爬虫(36):爬虫框架 Scrapy 入门基础(四) Downloader Middleware

    人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...

  9. 爬虫入门(四)——Scrapy框架入门:使用Scrapy框架爬取全书网小说数据

    为了入门scrapy框架,昨天写了一个爬取静态小说网站的小程序 下面我们尝试爬取全书网中网游动漫类小说的书籍信息. 一.准备阶段 明确一下爬虫页面分析的思路: 对于书籍列表页:我们需要知道打开单本书籍 ...

随机推荐

  1. SQL Server数据库文件与文件组总结

    文件和文件组概念 关于文件与文件组,简单概括如下,详情请参考官方文档"数据库文件和文件组Database Files and Filegroups"或更多相关资料: 数据文件概念: ...

  2. Kubernetes入门-集群安装

    Kubernetes是谷歌开源的容器集群编排平台,是一个完备的分布式系统支撑平台,为容器化应用提供部署运行.资源调度.服务发现和动态伸缩等一系列完整功能,具有强大的故障发现和自我修复机制.服务滚动升级 ...

  3. pyspider+PhantomJS的代理设置

    环境:pyspider0.3.9 PhantomJS2.1.1,均为最新版 进程用supervisor托管的. 其中需要加的几个地方: webui进程: pyspider -c config.json ...

  4. #032 有空就看PTA

      我咋买书了? 上学期

  5. Python开发 文件操作

    阅读目录 1.读写文件 open()将会返回一个file对象,基本语法: open(filename,mode) filename:是一个包含了访问的文件名称的路径字符串 mode:决定了打开文件的模 ...

  6. top命令用法详解

    top命令可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具.通过top命令所提供的互动式界面,用热键可以管理. 语法 top(选项) 选项 -b:以批处理模式 ...

  7. Thymeleaf入门(一)——入门与基本概述

    一.概述 1.是什么 简单说, Thymeleaf 是一个跟 Velocity.FreeMarker 类似的模板引擎,它可以完全替代 JSP . 2.feature 1.Thymeleaf 在有网络和 ...

  8. MongoDB索引基本操作

    一.简介 在MongoDB建立索引能提高查询效率,只需要扫描索引只存储的这个集合的一小部分,并只把这小部分加载到内存中,效率大大的提高,如果没有建立索引,在查询时,MongoDB必须执行全表扫描,在数 ...

  9. 转:eclipse 设置Java快捷键补全

    1.打开Eclipse,点击" Window - Preferences"; 2. 在目录树上选择"Java——Editor——Content Assist", ...

  10. spring整合redis使用RedisTemplate的坑Could not get a resource from the pool

    一.背景 项目中使用spring框架整合redis,使用框架封装的RedisTemplate来实现数据的增删改查,项目上线后,我发现运行一段时间后,会出现异常Could not get a resou ...