假设我正在抓取数据,并且某些字段被抓取""
意味着没有价值,我不想""
在其中出现一行。我该怎么做?例子:
field1 field2 field3
my place blurred trying
house fan
door mouse hat
我想要的是我的程序不会将整个第二行写入 csv,因为 field3 是空的。
您可以按照 [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