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 对象包含一些概念,如本链接中所述。