1

私が働いている会社では、コードのこの部分に飛び込む必要がありました。あなたの解析の 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. classstring-value を持つサブ要素を持たないものlocalbox(これについては後で説明します)
  4. その後、それらの要素の「内部」にあるすべての要素<a>を見つけます<li>
  5. class値を持つ属性名を持つもの1(例<a class="1">)

面白いところは③です。おそらく の@前に抜けがあると思いclassます。その場合、ステートメントは次のようになります。 3. that dont have a attribute name classwith value localbox.

ノード要素の暗黙的な文字列と値の変換と比較は... 控えめに言ってもエラーになりがちです。私はあなたがそのようなものを望んでいるとは思わない。

それが役に立てば幸い。

于 2011-03-31T14:35:54.637 に答える