Scrapy – Xpath技巧

Scrapy – Xpath技巧

在一个条件中使用文本节点

当你在XPath字符串函数中使用文本节点时,使用 .(dot) 而不是使用 .//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用于默认类型。它根据响应类型选择类型,或者默认设置为html,如果它与文本一起使用。

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

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

选择器列表对象

class scrapy.selector.SelectorList

选择器列表对象包含以下方法-

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程