扫码一下
查看教程更方便
当我们在 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]
仅显示文档中的第一个元素。
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)
上面的类包含以下参数 -
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
对象包含此链接中解释的一些概念。