扫码一下
查看教程更方便
当我们在 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]
仅显示文档中的第一个元素。
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
parent 下定义的所有第一个 li
元素
res("//ul//li[1]")
结果显示如下所示
[u'<li>one</li>', u'<li>four</li>']
可以得到整个文档中定义在ul
parent下的第一个li
元素如下所示
res("(//ul//li)[1]")
结果显示如下所示
[u'<li>one</li>']
内置选择器包括以下类
class scrapy.selector.Selector(response = None, text = None, type = None)
上面的类包含以下参数 -
HTMLResponse
和 XMLResponse
。UTF-8
字符编码对所有字符进行编码。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。 |
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
对象包含此链接中解释的一些概念。