在我工作的公司里,我不得不深入研究这部分代码。你的一个解析是失败的,并且怀疑这部分代码存在错误,但是由于我的经验不足,我无法确切知道它应该做什么。
from lxml import etree
uni = etree.tounicode
def results(self):
return [(e.attrib['href'], uni(e))
for e in self.doc.xpath('//li[@class="g" and not(class="localbox")]//a[@class="l"]')]
答案 0 :(得分:2)
XPath表达式执行以下操作:
//li[@class="g" and not(class="localbox")]//a[@class="l"]
^ ^ ^ ^ ^
1 2 3 4 5
<li>
元素class
的属性,其值为g
(示例<li class="g">
)class
的子元素localbox
(将在稍后解释)<a>
元素<li>
个元素
class
的值为1
(示例<a class="1">
)有趣的部分是3. @
前面可能缺少class
。在这种情况下,该陈述将是:3。没有具有值class
的属性名localbox
。
隐式字符串值转换和节点元素的比较是......最不容易出错。我不认为你想要那样的东西。
希望它有所帮助。