Scrapy - Xpath 提示

在条件中使用文本节点

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

例如 −

from scrapy import Selector
val = Selector(text = '<a href = "#">更多信息<strong>单击此处</strong></a>')

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

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

它将元素显示为 −

[u'更多信息',u'单击此处']

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

它将元素显示为 −

[u'更多信息']

//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 父级下定义的所有第一个 li 元素 −

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

它将结果显示为 −

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

您可以获取整个文档中 ul 父级下定义的第一个 li 元素,如下所示 −

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

它将结果显示为 −

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

内置选择器参考

内置选择器包括以下类 −

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

上述类包含以下参数 −

  • response −它是一个 HTMLResponse 和 XMLResponse,用于选择和提取数据。

  • text − 当没有可用的响应时,它使用 UTF-8 字符编码对所有字符进行编码。

  • type − 它指定不同的选择器类型,例如 HTML Response 为 html,XMLResponse 类型为 xml,默认类型为 none。它根据响应类型选择类型,如果与文本一起使用,则默认设置为 html。

内置选择器包含以下方法 −

Sr.No 方法与说明
1

xpath(query)

根据 xpath 查询匹配节点,并将结果作为 SelectorList 实例提供。参数 query 指定要使用的 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 对象包含以下方法 −

Sr.No 方法和说明
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 对象包含一些概念,如本链接中所述。

scrapy_selectors.html