我正在尝试使用
解析HTMLa = 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"]')
输出:
s1 => [<Element span at 0x7f0a6807a530>]
s2 => [<Element span at 0x7f0a6807a590>]
s3 => []
但是第一个span标签有'cut'类,但是s3是空的。在s2中,当我给两个类时,它返回标记。
答案 0 :(得分:7)
XPaths equal运算符恰好与右侧和左侧操作数匹配。
如果要搜索其中一个类,可以使用contains
函数:
a.xpath('.//span[contains(@class, "cut")]')
但是,它也可以匹配cut2
等类。
答案 1 :(得分:2)
我非常确定XPath查询不遵守CSS数据模型(即,单个class
属性中的类是以空格分隔的值)。为了做你想做的事,你应该看看使用CSS选择器(例如,通过cssselect)。
答案 2 :(得分:1)
为了避免Scharron提出的cut2问题,您可以将空格连接到类的前端和末尾。
a.xpath('.//span[contains(concat(" ", @class, " "), " cut ")]')