1

在我工作的公司中,我不得不深入研究这部分代码。您的其中一个解析失败,并且怀疑这部分代码存在错误,但由于我的经验不足,我无法确切地弄清楚它应该做什么。

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"]')]
4

1 回答 1

2

XPath 表达式执行以下操作:

//li[@class="g" and not(class="localbox")]//a[@class="l"]
  ^        ^              ^                 ^       ^
  1        2              3                 4       5
  1. 找到所有出现的<li>元素
  2. 具有以class值命名的属性g(示例<li class="g">
  3. 没有class带有字符串值的子元素localbox(稍后会解释)
  4. 之后它会找到这些<a>元素“内部”的所有<li>元素
  5. class具有带值的属性名称1(示例<a class="1">

有趣的部分是3。可能@前面有一个缺失class。在这种情况下,语句将是: 3. 没有class带有 value的属性名称localbox

节点元素的隐式字符串值转换和比较是......至少可以说容易出错。我不认为你想要那样的东西。

希望能帮助到你。

于 2011-03-31T14:35:54.637 回答