scrapy 删除具有空值的刮取数据

3lxsmp7m  于 2023-10-20  发布在  其他
关注(0)|答案(1)|浏览(132)

假设我正在抓取数据,有些字段被抓取了"",这意味着没有值。
我不想要有""的行。我该怎么做?举例说明:

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

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

41ik7eoe

41ik7eoe1#

您可以按照[the scrapy docs]中的说明编写和配置一个Item Pipeline,并在其值上进行测试。
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

相关问题