scrapy框架之item与pipelines

继续以起点小说为例子,我们要做的就是把对象存储到item(类似于一个字典)中,在通过pipelines持久化到txt文件中。
之前我们在运行爬虫的后面加”-o 爬虫名称” 这样很方便,但是也有很多的弊端,比如只能存为特定的格式,像txt这种就不可以。同时在使用pipelines存储前可以写一些存储前的操作。没有看过存储的小伙伴可以看一下这篇文章scrapy框架之生成存储文件json,xml、csv文件,废话不多说,直接开始!!

写item类

上次我们起点小说爬到是书名和作者,所以我们定义一个书名和作者。

import scrapy

class QidianItem(scrapy.Item):
     bookName = scrapy.Field()
     authors = scrapy.Field()

编写爬虫文件

我们要在爬虫文件中实例化Item对象,在把爬到的值赋值给item

import scrapy
from qidian.items import QidianItem

class QidianspiderSpider(scrapy.Spider):
    name = 'qidianspider'
    allowed_domains = ['www.qidian.com']
    start_urls = ['https://www.qidian.com/rank/yuepiao/']
    def parse(self, response):
        names = response.xpath('//*[@id="book-img-text"]/ul/li[1]/div[2]//a/text()').extract()
        authors = response.xpath('//*[@id="book-img-text"]/ul/li[1]/div[2]//text()').extract()
        item = QidianItem() #实例化对象
        for name,author in zip(names,authors):
           item['bookName'] = name #把值添加到item对象中
           item['authors'] = author
           yield item #提交到管道

在settings文件中开启管道

记得要关闭ROBOTSTXT_OBEY,写好UA伪装,不懂得可以看scrapy框架之创建项目运行爬虫

ITEM_PIPELINES = {
   'qidian.pipelines.QidianPipeline': 300,
}

简单测试一下看是否正确

在pipelines文件中写

class QidianPipeline:
    def process_item(self, item, spider):
        print(item)
        return item

在管道中打印一下item,看否把数据提交到了管道,看到下图就表示成功把数据投入管道中

scrapy框架之item与pipelines

正式编写pipelines文件

class QidianPipeline(object):
    def open_spider(self,spider):
        self.fp = open('my.txt','w',encoding='utf-8')
        print('爬虫开始~~')
    def process_item(self, item, spider):
        name = item['bookName']
        authors = item['authors']
        self.fp.write('书名:'+ name + '|' + '作者:' + authors + '\n')
        return item
    def close_spider(self, spider):
        self.fp.close()
        print('爬虫结束~~')

编写方法运行

from scrapy.cmdline import execute
execute('scrapy crawl qidianspider'.split())

成果展示

scrapy框架之item与pipelines

Original: https://www.cnblogs.com/yousuobutong/p/16725317.html
Author: 尤所不同
Title: scrapy框架之item与pipelines

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/569175/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • ch04 Java流程控制

    Java 流程控制 Scanner对象 通过Scanner类的next()与nextLine()方法获取输入的字符串,在读取前一般使用hasNext()与hasNextLine()…

    Java 2023年6月9日
    066
  • Java import的作用

    可是现在问题来了,因為很多package的名称非常的长,在编程时,要使用一个类要将多个包名.类名完全写出,会让代码变得冗长,减低了简洁度。例如 显得非常麻烦,于是Sun公司就引入了…

    Java 2023年5月29日
    076
  • 系列文章目录和关于我

    A丶系列文章目录 一丶JUC源码系列 本系列从AQS独占,共享,等待队列依次推进,并且穿插的分析了常见工具如ReentrantLock,CountDownLatch,原子类,Fut…

    Java 2023年6月14日
    078
  • Android 虹软人脸识别SDK-人脸对比

    准备 : 登录官方网站,获取SDK,进行个人验证后新建项目,获取APP_ID,和SDK_KEY; https://ai.arcsoft.com.cn/ucenter/resourc…

    Java 2023年6月9日
    097
  • 数据结构基础—绪论

    数据结构基础—绪论 一、什么是数据结构 数据结构是一门研究非数值计算的程序实际问题中计算机的操作对象以及它们之间关系和操作等的学科 程序设计 = 数据结构 +算法 数据结构:问题的…

    Java 2023年6月5日
    098
  • list对象中的数据如何去重呢?

    下文笔者讲述list对象的去重方法分享,list的实现类是我们存储数据的容器, 当里面存储的对象存在重复值时,我们该如何对其进行去重操作呢? 下文笔者将一一道来,首先我们需了解对象…

    Java 2023年6月15日
    0110
  • FileOutputStream(文件字节输出流)

    FileOutputStream字节输出流 字节输出流,从内存到硬盘 1.构造方法 构造方法 作用 FileOutputStream(File file) 创建文件输出流以写入由指…

    Java 2023年6月9日
    091
  • Redis持久化

    Redis持久化都有哪些类型? Redis持久化分为两种: RDB持久化与AOF持久化 两种持久化的异同? (1)RDB持久化:RDB持久化是将我们运行过程中Redis数据库中的对…

    Java 2023年6月6日
    092
  • SpringCloud微服务实战——搭建企业级开发框架(三十八):搭建ELK日志采集与分析系统

    一套好的日志分析系统可以详细记录系统的运行情况,方便我们定位分析系统性能瓶颈、查找定位系统问题。上一篇说明了日志的多种业务场景以及日志记录的实现方式,那么日志记录下来,相关人员就需…

    Java 2023年6月9日
    069
  • Java基础

    环境 并非所有的计算机都可以开发java程序,java程序的开发与运行需要专门的环境。 因为java语言的程序是运行在java所专有的系统中。 要运行java程序我们需要在操作系统…

    Java 2023年6月7日
    0138
  • Flutter 发布 pub 命令

    1.发布之前,不规范检测,类似lint. 2.发布 如果发布失败,遇见code 1,用下面命令: 注意:FQ,否则超时失败 Original: https://www.cnblog…

    Java 2023年5月29日
    086
  • 理解、学习与使用 JAVA 中的 OPTIONAL

    转换值 有很多种方法可以转换 Optional 的值。我们从 map() 和 flatMap() 方法开始。 先来看一个使用 _map()_API 的例子: map() 对值应用(…

    Java 2023年5月29日
    065
  • 7、线程状态

    线程状态5状态 新建 new 就绪 start() 运行 cpu调度 阻塞 blocked 停止 stop package com.testthread1; /** * 1、建议线…

    Java 2023年6月8日
    074
  • sharding-jdbc教程 看这一篇就够了

    ​ Sharding-JDBC是ShardingSphere的第一个产品,也是ShardingSphere的前身。 它定位为轻量级Java框架,在Java的JDBC层提供的额外服务…

    Java 2023年6月7日
    089
  • fastposter发布1.4.2 跨语言的海报生成器

    fastposter发布1.4.2 跨语言的海报生成器 fastposter发布1.4.2 跨语言的海报生成器,一分钟完成海报开发 future: 完善docker镜像 引入异步a…

    Java 2023年6月5日
    099
  • Java集合框架概述:Collection(List, Set, Queue)和Map

    http://sparkandshine.net/java-collections-framework-overview-collection-list-set-queue-map…

    Java 2023年5月29日
    078
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球