为什么以下两个代码片段会给出不同的输出?它们之间的唯一区别是h1第一种情况下的标签被h第二种情况下的标签替换。这是因为h1标签在 html 中具有特殊的“含义”吗?我尝试使用h1through h6,它们都给出[]了输出,而使用h7it 开始给出[u'xxx']输出。
h1
h
h6
[]
h7
[u'xxx']
from scrapy import Selector # scrapy version: 1.2.2 text = '<h1><p>xxx</p></h1>' print Selector(text=text).xpath('//h1/p/text()').extract() Output[1]: [] text = '<h><p>xxx</p></h>' print Selector(text=text).xpath('//h/p/text()').extract() Output[2]: [u'xxx']
根据 W3C,在里面添加p标签是无效的。
p
无论如何,为了绕过这个问题并且只使用任何xml结构,您只需像type这样更改:
xml
type
sel = Selector(text="anyxml", type="xml")
这将尊重任何 xml 结构。