这个
ItemLoader
允许呼叫
add_value()
(以及
add_css()
和
add_xpath()
)
同一字段多次
. 当您要查找的信息可以在HTML源的多个位置找到时,或者当请求之间的HTML布局不同时,这会很有帮助。为了适应这种情况,项目加载器将所有字段值存储在列表中。
当您希望字段只有一个值(与价格信息一样)时,您可以告诉项目加载器在以下情况下如何转换列表:
load_item()
output processor
. 实现这一点的规范方法是将
类别:
from scrapy.loader import ItemLoader
from scrapy.loader.processors import TakeFirst
class MyItemLoader(ItemLoader):
default_item_class = MyItem
price_euro_out = TakeFirst()
然后,您可以像以前一样填充此项目加载器,这样您就不必再告诉项目加载器要使用哪种项目类型了:
l = MyItemLoader(response=response)
l.add_value('price_euro', price_euro)
yield l.load_item()
对于您发布的示例代码,您甚至可以通过
添加xpath()
方法和传递
add
像
selector
项加载器的关键字参数:
l = MyItemLoader(selector=add)
l.add_xpath('price_euro', './/strong[@class="price price--eur"]/text()')
yield l.load_item()
如果要为启用此“获取第一个列表元素”行为
全部的
字段,您还可以为项目加载器声明默认输出处理器:
class MyItemLoader(ItemLoader):
default_item_class = MyItem
default_output_processor = TakeFirst()
刮痧医生有一个
list of built-in processors
.