Scrapy – Xpath使用技巧

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

当你在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>']

Scrapy 内置选择器参考

内置的选择器包括以下类别 –

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) 它提供了正则表达式,并将匹配的节点作为一个unicode字符串的列表带出来。参数regex可以作为正则表达式或字符串,使用re.compile(regex)方法将其编译为正则表达式。
5 register_namespace(prefix, uri) 它指定了选择器中使用的名称空间。如果不从非标准名称空间注册名称空间,你就不能提取数据
6 remove_namespaces() 它抛弃了命名空间,并允许使用无命名空间的xpaths来遍历文档。
7 __nonzero__() 如果内容被选中,那么该方法返回真,否则返回假

Scrapy 选择器列表对象

class scrapy.selector.SelectorList

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

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

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程