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对象包含了这个链接中解释的一些概念。