美文网首页
Item pipeline特定的方法

Item pipeline特定的方法

作者: 垃圾桶边的狗 | 来源:发表于2019-02-24 20:07 被阅读0次
“ class PriceConverterPipeline(object):


        # 英镑兑换人民币汇率
        exchange_rate = 8.5309


        def process_item(self, item, spider):
            # 提取item的price 字段(如£53.74)
            # 去掉前面英镑符号£,转换为float 类型,乘以汇率
            price = float(item['price'][1:]) * self.exchange_rate


            # 保留2 位小数,赋值回item的price 字段
            item['price'] = '¥%.2f' % price
”


“● 一个Item Pipeline不需要继承特定基类,只需要实现某些特定方法,例如process_item、open_spider、close_spider。

● 一个Item Pipeline必须实现一个process_item(item, spider)方法,该方法用来处理每一项由Spider爬取到的数据,其中的两个参数:
 Item 爬取到的一项数据(Item或字典)。
 Spider 爬取此项数据的Spider对象。
上述代码中的process_item方法实现非常简单,将书籍的英镑价格转换为浮点数,乘以汇率并保留2位小数,然后赋值回item的price字段,最后返回被处理过的item。
可以看出,process_item方法是Item Pipeline的核心,对该方法还需再做两点补充说明:

● 如果process_item在处理某项item时返回了一项数据(Item或字典),返回的数据会递送给下一级”
“级Item Pipeline(如果有)继续处理。

● 如果process_item在处理某项item时抛出(raise)一个DropItem异常(scrapy.exceptions.DropItem),该项item便会被抛弃,不再递送给后面的Item Pipeline继续处理,也不会导出到文件。通常,我们在检测到无效数据或想要过滤数据时,抛出DropItem异常。
除了必须实现的process_item方法外,还有3个比较常用的方法,可根据需求选择实现:

● open_spider(self, spider)
Spider打开时(处理数据前)回调该方法,通常该方法用于在开始处理数据之前完成某些初始化工作,如连接数据库。

● close_spider(self, spider)
Spider关闭时(处理数据后)回调该方法,通常该方法用于在处理完所有数据之后完成某些清理工作,如关闭数据库。

● from_crawler(cls, crawler)
创建Item Pipeline对象时回调该类方法。通常,在该方法中通过crawler.settings读取配置,根据配置创建Item Pipeline对象。

摘录来自: 刘硕. “精通Scrapy网络爬虫。” iBooks.

相关文章

网友评论

      本文标题:Item pipeline特定的方法

      本文链接:https://www.haomeiwen.com/subject/sjwbyqtx.html