2

構造が常に変化するhtmlドキュメントをスクレイピングしています。Cssのクラス名も変わるので、あてになりません。ただし、決して変わらないことが 1 つあります。値は常に、次のようにまったく同じサブツリーに含まれます。

<span>
  <span>
    <span>wanted value</span>
    <span></span>wanted value
  </span>
</span>

これをXPath式で表現できますか?

一致してはいけません:

<span>
  <span>
    <span> 1, one too little </span>
    <span> 2 </span>
    <span> 3, one too many </span>
    <span> 4, two too many </span>
  </span>
</span>

Python の lxml を使用してこれを行う予定です。

4

1 に答える 1

3

必要な値の場所が常にスパンの第 3 レベルにある場合、次のような xpath が機能します。

//span/span/span[1]

次の HTML ドキュメントに適用した場合:

<html>
  <head>
    <title>Your Title</title>
  </head>
  <body>
    <div>
    <span>
      <span>
        <span>wanted value</span>
        <span></span>
      </span>
    </span>
    </div>
    <div>
    <span>
      <span>
        <span>wanted value</span>
        <span></span>
      </span>
    </span>
    </div>
  </body>
</html>

結果は次のようになります。

wanted value
wanted value

編集

第 3 レベルでスパンの合計が 2 に等しいときに、第 3 レベルで最初のスパンの値のみが必要な場合は、次の XPath を使用できます。

//span/span[count(span) = 2]/span[1]
于 2013-02-19T10:11:57.187 に答える