Scrapy Item Loaders - 从给定节点开始处理,而不是根选择器

时间:2014-10-16 15:40:11

标签: scrapy

我有一个xpath表达式,它导致页面上的“product”元素(实际上是HTML5微数据)。嵌套在此元素下的是产品名称,描述,价格等的各种其他元素。

目前我将根选择器对象传递给Item Loader,然后构造一个非常长的xpath语句来检索产品属性,例如。

l.add_xpath('name', {LONG XPATH TO PRODUCT ELEMENT} + {LONG XPATH TO NAME ELEMENT})
l.add_xpath('price', {LONG XPATH TO PRODUCT ELEMENT} + {LONG XPATH TO PRICE ELEMENT})

这在xpath处理方面似乎效率很低,有没有办法告诉ItemLoader从给定节点开始?或者我是否需要编写自己的ItemLoader来处理这种情况?感谢

1 个答案:

答案 0 :(得分:4)

这实际上非常明显,现在我对选择器了解得更多。 selector.xpath()返回一个选择器列表,所以我可以这样做:

productSelector = selector.xpath({xpath to product})[0] # assumes match

l = ItemLoader(item=productItem, selector=productSelector)
l.add_xpath('name', {xpath to product name})