假设我正在抓取数据,而某些字段刮掉""
意味着没有价值
而且我不想在其中加""
行。我该怎么做?
例如:
field1 field2 field3
my place blurred trying
house fan
door mouse hat
我想要的是我的程序不会将整个第二行写入csv,因为field3为空。
答案 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