2013-01-21 26 views
4

我试图解析HTML:LXML不能正确解析标签多类

s1 => [<Element span at 0x7f0a6807a530>] 
s2 => [<Element span at 0x7f0a6807a590>] 
s3 => [] 

但第一跨度标签具有类“腰斩”,但S3是空的。而在S2中,当我给这两个类时,它返回标签。

回答

1

为了避免由Scharron引发的cut2问题,您可以将空格连接到类的前端和尾端。

a.xpath('.//span[contains(concat(" ", @class, " "), " cut ")]') 
+0

如果标签只是'',这会匹配吗? – millimoose

+0

它会。在上面的例子中,它将成为'a.xpath('.// span [contains(“cut”,“cut”)]')'这将是真实的 – Drover

2

我很确定CSS数据模型(即类是单个class属性中的空格分隔值)未遵守XPath查询。为了做你想做的事,你应该看看使用CSS选择器(例如,通过cssselect)。

7

XPaths等号运算符完全匹配右侧和左侧操作数。 如果你要搜索类的一个,你可以使用contains功能:

a.xpath('.//span[contains(@class, "cut")]') 

但是,它也可以匹配像cut2类。

cssselect是一个处理CSS选择器的库。一个名为pyquery的包装器模仿了python中的JQuery库。

+0

解决了我的问题!非常感谢。 –