删除带有空值的已删除数据

时间:2013-08-28 09:13:03

标签: python scrapy

假设我正在抓取数据,而某些字段刮掉""意味着没有价值 而且我不想在其中加""行。我该怎么做? 例如:

field1       field2     field3
my place     blurred    trying
house        fan               
door         mouse      hat

我想要的是我的程序不会将整个第二行写入csv,因为field3为空。

1 个答案:

答案 0 :(得分:1)

您可以按照[scrapy docs]和drop item中的说明编写和配置项目管道,并对其值进行测试。

pipeline.py文件中添加:

from scrapy.exceptions import DropItem

class DropIfEmptyFieldPipeline(object):

    def process_item(self, item, spider):

        # to test if only "job_id" is empty,
        # change to:
        # if not(item["job_id"]):
        if not(all(item.values())):
            raise DropItem()
        else:
            return item

并在settings.py中设置此项(适应您的项目名称)

ITEM_PIPELINES = [ 'myproject.pipeline.DropIfEmptyFieldPipeline', ]

在OP关于测试“护士”的评论之后进行编辑

from scrapy.exceptions import DropItem
import re

class DropIfEmptyFieldPipeline(object):

    # case-insensitive search for string "nurse"
    REGEX_NURSE = re.compile(r'nurse', re.IGNORECASE)

    def process_item(self, item, spider):
        # user .search() and not .match() to test for substring match
        if not(self.REGEX_NURSE.search(item["job_id"])):
            raise DropItem()
        else:
            return item