首页 > 其他分享 >Scrapy 框架的 pipelines 参数详解

Scrapy 框架的 pipelines 参数详解

时间:2023-02-12 02:22:05浏览次数:47  
标签:pipelines name self spider item Scrapy 详解 scrapy

目录

pipelines 的使用

  1. 在 pipelines.py 中创建 pipelines 的类。(也可用默认存在的类)
class PipelinesTest:

    def process_item(self, item, spider):
        print(item)
        return item
  1. 编写数据处理的函数,函数格式是固定的。
def process_item(self, item, spider):
	# 中间这里插入需要做的事情,其他的都别改
    return item
  1. 在 settings.py 中启用 pipelines
    在 settings.py 中找到如图所示代码
    image
    取消注释
    image
    再把名字给改成自己的,就行了
    image
    可以有多条管道,所以可以不改名字,而是把自己创建的管道的名字加进去,像这样
    image

  2. 编写 spider 返回的数据格式。(在 items.py 中编写,编写格式也是固定、不能更改的)

class PipelinesTestItem(scrapy.Item):
    name = scrapy.Field()

name 可以改别的,也可以多加几个,但格式得固定,例如

class PipelinesTestItem(scrapy.Item):
    name = scrapy.Field()
    hentai = scrapy.Field()
    homula = scrapy.Field()
  1. 在 spider 中导入 items
    from ..items import PipelinesTestItem

  2. 通过 yield(生成器方式) 返回数据

def parse(self, response):
    name = "丘比必死,圆神永存"
    print(name)
    yield PipelinesTestItem(name=name)

一个例子

spider.py 代码
import scrapy
from ..items import PipelinesTestItem


class TestSpider(scrapy.Spider):
    name = 'douban'
    allowed_domains = ['movie.douban.com']
    start_urls = ['https://movie.douban.com/top250?start=0&filter=']

    def parse(self, response):
        name = "丘比必死,圆神永存"
        print(name)
        yield PipelinesTestItem(name=name)
itesms.py 代码
# Define here the models for your scraped items
#
# See documentation in:
# https://docs.scrapy.org/en/latest/topics/items.html

import scrapy


class SpridertestItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    pass


class PipelinesTestItem(scrapy.Item):
    name = scrapy.Field()

pipelines.py 代码
# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html


# useful for handling different item types with a single interface
from itemadapter import ItemAdapter


class SpridertestPipeline:
    def process_item(self, item, spider):
        return item


class PipelinesTest:

    def process_item(self, item, spider):
        print(item)
        return item
如果看不懂,或者不知道哪里出了问题,可以直接把代码CV上 pycharm 试试,然后再一点点对比自己的。

第3步在 settings.py 启用 pipelines ,考虑到代码太多不好对比我就没放了,跟着第三步做就对了。

pipelines 常用的函数

一如既往地,格式是固定如下的。

  1. open_spider(self, spider) : 开启及执行
  2. process_item(self, item, spider) : 数据处理
  3. close_spider(self, spider) : 爬虫结束时调用
class PipelinesTest:

    def open_spider(self, spider):
        print('我是开始')

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

    def close_spider(self, spider):
        print('我是结束')

简单粗暴,这串代码全是在 pipelines.py 里的,复制上去,自己动手改一下,print 一下就知道大概的一个逻辑思路了。


如果觉得写的还不错的话,可以关注支持一下,哪有问题的话也可以随意评论的,大不了聊天嘛

标签:pipelines,name,self,spider,item,Scrapy,详解,scrapy
From: https://www.cnblogs.com/aduiduidui/p/17113186.html

相关文章

  • 位运算详解
    0*01位运算补码在补码下每个数值都有唯一的表示方式发生算数溢出时,32位无符号整数相当于自动对2^32取模0*3F3F3F3F满足一下两个条件整数的两倍不超过int能表示......
  • CC1链详解
    前言:这篇文章是对CC1的总结,个人学习,如有不对请多指教。谢谢!环境:jdk8u71以下,因为在该jdk版本以上这个漏洞已经被修复了下载链接:https://www.oracle.com/cn/java/technolog......
  • 768~769 MVC_jsp演变历史,MVC详解
    MVC:开发模式jsp演变历史1.早期只有servlet,只能使用response输出标签数据,非常麻烦2.后来又jsp,简化了Servlet的开发,如果过度使用jsp,在jsp中即写大......
  • Android-Service详解
    前言Service是长期运行在后台的应用程序组件。Service 是和应用程序在同一个进程中,所以应用程序关掉了,Service也会关掉。可以理解为Service是不能直接处理耗时操作的......
  • "万字" Java I/O 详解
    JavaI/O流讲解每博一文案谁让你读了这么多书,又知道了双水村以外还有一个大世界,如果从小你就在这个天地里,日出而作,日落而息。那你现在就会和众乡亲抱同一理想:经过几年......
  • Scrapy 框架的 spider 参数
    目录Spider的用法变量函数Spider的常用解析函数response对象相关函数Spider的用法变量#名字,要求全局唯一name='douban'#运行爬取的网址allowed_domains=['......
  • 神经网络基础部件-BN层详解
    一,数学基础1.1,概率密度函数随机变量(randomvariable)是可以随机地取不同值的变量。随机变量可以是离散的或者连续的。简单起见,本文用大写字母$X$表示随机变量,小写字母$x......
  • MVC_详解与EL_概述
    MVC_详解MVC:1.M:Model,模型完成具体的业务操作,如:查询数据库,封装对象2.V:View,视图......
  • Go Channel 详解
    分类 编程技术Channel类型blockingBufferedChannelsRangeselecttimeoutTimer和Tickerclose同步参考资料Channel是Go中的一个核心类型,你可以把它看成一个......
  • js中的闭包详解
    闭包:闭包的应用直接上代码理解:functiondoSth(t,cb){returnfunction(){if(--t===0){cb()}}}functionlogSth(){console.log('嘿嘿嘿');}letfn=doSth(4,lo......