Scrapy Xpath 技巧

在条件中使用文本节点

当我们在 XPath 字符串函数中使用文本节点时,请使用 .(点)而不是 .//text() ,因为这会生成称为节点集的文本元素集合。

例如:

from scrapy import Selector
val = Selector(text = '<a href = "#">More Info<strong>click here</strong></a>')

如果要将节点集转换为字符串,请使用以下格式

val.xpath('//a//text()').extract()

它将元素显示为

[u'More Info',u'click here']

并且

val.xpath("string('//a[1]//text())").extract()

结果显示如下所示

[u'More Info']

//node[1] 和 (//node)[1] 之间的区别

//node[1] 显示在各自父项下定义的所有第一个元素。 (//node)[1] 仅显示文档中的第一个元素。

from scrapy import Selector
val = Selector(text = """
   <ul class = "list">
      <li>one</li>
      <li>one</li>
      <li>one</li>
   </ul>
   
   <ul class = "list">
      <li>four</li>
      <li>five</li>
      <li>six</li>
   </ul>""")
res = lambda x: val.xpath(x).extract()

下一行显示了在其各自父项下定义的所有第一个 li 元素

res("//li[1]")

结果显示如下所示

[u'<li>one</li>', u'<li>four</li>']

可以得到完整文档的第一个li元素如下所示

res("(//li)[1]")

显示结果如下所示

[u'<li>one</li>']

也可以显示 ul parent 下定义的所有第一个 li 元素

res("//ul//li[1]")

结果显示如下所示

[u'<li>one</li>', u'<li>four</li>']

可以得到整个文档中定义在ul parent下的第一个li元素如下所示

res("(//ul//li)[1]")

结果显示如下所示

[u'<li>one</li>']

内置选择器参考

内置选择器包括以下类

class scrapy.selector.Selector(response = None, text = None, type = None)

上面的类包含以下参数 -

  • response - 选择和提取数据的 HTMLResponseXMLResponse
  • text - 当没有可用响应时,它使用 UTF-8 字符编码对所有字符进行编码。
  • type - 它指定不同的选择器类型,例如 html 用于 HTML Response,xml 用于 XMLResponse 类型,none 用于默认类型。 如果与文本一起使用,它会根据响应类型选择类型或默认设置为 html。

内置选择器包含以下方法

序号 方法 描述
1 xpath(query) 它根据 xpath 查询匹配节点,并将结果作为 SelectorList 实例提供。 参数查询指定要使用的 XPATH 查询。
2 css(query) 它提供 CSS 选择器并返回 SelectorList 实例。 参数查询指定要使用的 CSS 选择器。
3 extract() 它将所有匹配的节点显示为 unicode 字符串列表。
4 re(regex) 它提供正则表达式并将匹配节点显示为 unicode 字符串列表。 参数 regex 可以用作正则表达式或字符串,使用 re.compile(regex) 方法编译为正则表达式。
5 register_namespace(prefix, uri) 它指定选择器中使用的命名空间。 如果不从非标准命名空间注册命名空间,则无法提取数据。
6 remove_namespaces() 它丢弃命名空间并允许使用无命名空间的 xpath 遍历文档。
7 __nonzero__() 如果内容被选中,则此方法返回 true ,否则返回 false

SelectorList 对象

class scrapy.selector.SelectorList

SelectorList 对象包含以下方法

序号 方法 描述
1 xpath(query) 它对元素使用 .xpath() 方法并将结果作为 SelectorList 实例提供。 参数查询指定 Selector.xpath() 方法中定义的参数。
2 css(query) 它对元素使用 .css() 方法并将结果作为 SelectorList 实例返回。 参数查询指定 Selector.css() 方法中定义的参数。
3 extract() 它使用 .extract() 方法取出列表的所有元素,并将结果作为 unicode 字符串列表返回。
4 re() 它对元素使用 .re() 方法,并将元素作为 unicode 字符串列表导出。
5 __nonzero__() 如果列表不为空,则此方法返回 true,否则返回 false

SelectorList 对象包含此链接中解释的一些概念。

查看笔记

扫码一下
查看教程更方便