ECommerceCrawlers项目分析(七)

2021SC@SDUSC

这篇博客将简单介绍Pipeline的使用以及pipelines文件的代码分析

一.Pipeline的使用

当Item在Spider中被收集之后,它将会被传递到Item Pipeline,一些组件会按照一定的顺序执行对Item的处理。

每个item pipeline组件(有时称之为“Item Pipeline”)是实现了简单方法的Python类。他们接收到Item并通过它执行一些行为,同时也决定此Item是否继续通过pipeline,或是被丢弃而不再进行处理

以下是item pipeline的一些典型应用:

  • 清理HTML数据
  • 验证爬取的数据(检查item包含某些字段)
  • 查重(并丢弃)
  • 将爬取结果保存到数据库中

 二.pipelines文件的代码分析

pipelines文件的代码如下:

class FilePipeline(object):
    def process_item(self, item, spider):

        data = ''

        # 写入文件cnblog.txt
        # a:    打开一个文件用于追加。如果该文件已存在,
        # 文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
        with open('cnblog.txt', 'a', encoding='utf-8') as f:
            titles = item['title']
            links = item['link']
            # zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。
            for i, j in zip(titles, links):
                # 字符串拼接
                data += i+'     '+j+'\n'
            # 写入文件
            f.write(data)
            # 关闭文件
            f.close()
        return item

(1)

它定义了一个名叫FilePipeline的类,并且定义了的一个重要函数,process_item

process_item(self, item, spider)
每个item pipeline组件都需要调用该方法,这个方法必须返回一个具有数据的dict,或是 Item (或任何继承类)对象, 或是抛出 DropItem 异常,被丢弃的item将不会被之后的pipeline组件所处理。
参数:
  • item (Item 对象或者一个dict) – 被爬取的item
  • spider (Spider 对象) – 爬取该item的spider

而在本函数中,它返回的是一个item对象。

(2)

process_item函数中,将爬取到的数据写入一个名为'cnblog.txt'的文件中

其中参数'a'代表:若文件已经存在,新的内容将会被写入到已有内容之后;如果该文件不存在,则创建新文件进行写入。

        # 写入文件cnblog.txt
        # a:    打开一个文件用于追加。如果该文件已存在,
        # 文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
        with open('cnblog.txt', 'a', encoding='utf-8') as f:

(3)

将item中的title和link写入

其中item是CnblogItem类,有两个变量title和link

class CnblogItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    title = scrapy.Field()
    link = scrapy.Field()

写入使用了zip()函数,功能是将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。

            titles = item['title']
            links = item['link']
            # zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由           这些元组组成的列表。
            for i, j in zip(titles, links):
                # 字符串拼接
                data += i+'     '+j+'\n'
            # 写入文件
            f.write(data)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值