我正在将items.py
中定义的scrapy Item类插入到mongodb中,但我需要它来插入类的所有字段,以便将db中的这些字段添加为空。列表类下的Name
和Price
将始终作为空插入,但我希望保持pipelines.py
清洁,以便我可以轻松切换另一个项目。目前,如果我没有将类的每个部分设置为空字符串,则在插入数据库时不会添加该字符串。
我是否需要将每个成员初始化为空字典?像Title = scrapy.Field({})
items.py
class Listing(scrapy.Item):
Title = scrapy.Field()
Address = scrapy.Field()
Price = scrapy.Field()
Name = scrapy.Field()
pipelines.py
def process_item(self, item, spider):
# Price and Name will always be empty
item['Price'] = ''
item['Name'] = ''
self.collection.insert_one(dict(item))
答案 0 :(得分:0)
您可以使用scrapy的ItemLoader:
from scrapy.loader import ItemLoader
from scrapy.item import Item, Field
class Listing(Item):
title = Field()
address = Field()
price = Field()
name = Field()
class MyLoader(ItemLoader):
default_item_class = Listing
然后:
loader = MyLoader(response=response)
loader.add_xpath('title', '//some/xpath/that/finds/nothing')
loader.load_item()
# {'title': ['']}