教程 > scrapy 教程 > 阅读:43

scrapy xpath 技巧——迹忆客-ag捕鱼王app官网

在条件中使用文本节点

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

例如:

from scrapy import selector
val = selector(text = '')

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

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 = """
   
  • one
  • one
  • one
  • four
  • five
  • six
""") res = lambda x: val.xpath(x).extract()

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

res("//li[1]")

结果显示如下所示

[u'
  • one
  • ', u'
  • four
  • ']

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

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

    显示结果如下所示

    [u'
  • one
  • ']

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

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

    结果显示如下所示

    [u'
  • one
  • ', u'
  • four
  • ']

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

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

    结果显示如下所示

    [u'
  • one
  • ']

    内置选择器参考

    内置选择器包括以下类

    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 对象包含此链接中解释的一些概念。

    查看笔记

    扫码一下
    查看教程更方便
    网站地图