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父级下定义的所有第一个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 用于 HTML 响应,xml 用于 XMLResponse 类型,none 用于默认类型。它根据响应类型选择类型,或者如果与 text 一起使用,则默认设置为 html。

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

序号 方法 & 描述
1

xpath(query)

它根据 xpath 查询匹配节点,并将结果作为 SelectorList 实例提供。参数 query 指定要使用的 XPATH 查询。

2

css(query)

它提供 CSS 选择器并返回 SelectorList 实例。参数 query 指定要使用的 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()

2

css(query)

css()

3

extract()

extract()

4

re()

__nonzero__()

5

__nonzero__()

如果列表不为空,则此方法返回 True,否则返回 False。

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

scrapy_selectors.htm
广告