1

假设我正在抓取数据,并且某些字段被抓取""意味着没有价值,我不想""在其中出现一行。我该怎么做?例子:

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

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

4

1 回答 1

1

您可以按照 [the scrapy docs] 中的说明编写和配置项目管道,并通过对其值的测试来删除项目。

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
于 2013-08-28T09:35:06.850 回答