lxml无法正确解析具有多个类的标签
我正在尝试用
a = lxml.html.fromstring('<html><body><span class="cut cross">Text of double class</span><span class="cross">Text of single class</span></body></html>')
s1 = a.xpath('.//span[@class="cross"]')
s2 = a.xpath('.//span[@class="cut cross"]')
s3 = a.xpath('.//span[@class="cut"]')
来解析HTML。
s1 => [<Element span at 0x7f0a6807a530>]
s2 => [<Element span at 0x7f0a6807a590>]
s3 => []
但是,第一个span标签的类是'cut',可是s3却是空的。而在s2中,当我给出两个类时,它却能返回这个标签。
3 个回答
2
我很确定,在XPath查询中,CSS的数据模型(也就是类名是用空格分开的,放在一个class
属性里)并没有被遵循。为了实现你想要的功能,你应该考虑使用CSS选择器(比如,可以通过cssselect来实现)。
1
为了避免Scharron提到的cut2问题,你可以在类的前面和后面加上空格。
a.xpath('.//span[contains(concat(" ", @class, " "), " cut ")]')