我正在尝试使用解析HTML
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"]')
Run Code Online (Sandbox Code Playgroud)
输出:
s1 => [<Element span at 0x7f0a6807a530>]
s2 => [<Element span at 0x7f0a6807a590>]
s3 => []
Run Code Online (Sandbox Code Playgroud)
但是第一个span标签有'cut'类,但是s3是空的.在s2中,当我给两个类时,它返回标记.
XPath等于运算符恰好匹配右和左操作数.如果要搜索其中一个类,可以使用以下contains函数:
a.xpath('.//span[contains(@class, "cut")]')
Run Code Online (Sandbox Code Playgroud)
但是,它也可以匹配类cut2.
cssselect是一个处理CSS选择器的库.一个名为pyquery的包装器模仿了python中的JQuery库.
小智 1
为了避免 Scharron 带来的 cut2 问题,您可以将空格连接到类的前面和末尾。
a.xpath('.//span[contains(concat(" ", @class, " "), " cut ")]')
Run Code Online (Sandbox Code Playgroud)