16

同様の質問を見たことがありますが、私が見た解決策は次の場合には機能しません。私は XPath の専門家にはほど遠いです。HTMLを解析する必要があるだけです。ヘッダー 2 に続くテーブルを選択するにはどうすればよいですか。以下の解決策はうまくいくと思いましたが、どうやらうまくいかないようです。誰か助けてくれませんか?

content = """<div>
<p><b>Header 1</b></p>
<p><b>Header 2</b><br></p>
<table>
<tr>
    <td>Something</td>
</tr>
</table>
</div>
"""

from lxml import etree
tree = etree.HTML(content)
tree.xpath("//table/following::p/b[text()='Header 2']")
4

3 に答える 3

17

@Arupの答えに代わるいくつかの選択肢:

tree.xpath("//p[b='Header 2']/following-sibling::table[1]")

「ヘッダー 2」を含むヘッダーにtable続く最初の兄弟を選択しますpb

tree.xpath("//b[.='Header 2']/following::table[1]")

含まれている「ヘッダー 2」tableの後のドキュメント順で最初のものを選択します。b

さまざまな軸の詳細については、XPath 1.0 仕様を参照してください。

  • の軸には、ドキュメントの順序でコンテキスト ノードの後に​​あるコンテキスト ノードと同じドキュメント内のすべてのノードが含まれます。子孫は除外され、属性ノードと名前空間ノードは除外されます。

  • following-sibling軸には、コンテキスト ノードの後続のすべての兄弟が含まれます。コンテキスト ノードが属性ノードまたは名前空間ノードの場合、次の兄弟軸は空です。

于 2013-10-09T21:04:30.527 に答える