是否可以使用ItemLoaders来解析HTML节点?

时间:2014-12-16 20:11:03

标签: python scrapy

通常,项目加载器会在将值传递给输入处理器之前自动提取数据:

  
      
  1. 提取xpath1中的数据,并通过名称字段的输入处理器传递。 (Scrapy docs
  2.   

是否可以为项加载器的某些元素更改此行为,因此我可以传入更复杂的结构(在我看来是选择器)?

我有一个这样的HTML文档:

<a class="foo" href="http://example.com">example 1</a>
<a class="foo" href="http://example.org">example 2</a>

现在我想在蜘蛛中获取这些链接元素

loader.add_css('links', '.foo')

并在项目加载器中解析它们以获取值列表(在输出处理器之后),如下所示:

[("http://example.com", "example 1"), ("http://example.org", "example 2")]

但是,由于项目加载器会自动将输入转换为unicode,因此这似乎并不容易。

1 个答案:

答案 0 :(得分:1)

您可以使用.add_value()和“手动”构建texthref s的列表:

links = [(item.css('::text').extract()[0], 
          item.css('::attr(href)').extract()[0])
         for item in response.css('.foo')]
loader.add_value('links', links)