私は同様の質問を見ましたが、私が見た解決策は以下では機能しません。私は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']")
軸を使用して以下のXPATH 1.0を使用する必要があります preceding
。
//table[preceding::p[1]/b[.='Header 2']]
@Arupの答えのいくつかの代替案:
tree.xpath("//p[b='Header 2']/following-sibling::table[1]")
「Header2」を含むtable
ヘッダーを含むp
に続く最初のb
兄弟を選択します
tree.xpath("//b[.='Header 2']/following::table[1]")
「ヘッダー2」を含むtable
の後のドキュメント順で最初のb
を選択します
さまざまな軸の詳細については、 XPath 1.0仕様 を参照してください。
following軸には、コンテキストノードの後にあるコンテキストノードと同じドキュメント内のすべてのノードが含まれますドキュメントの順序で、子孫を除外し、属性ノードと名前空間ノードを除外します
following-sibling軸には、コンテキストノードの次のすべての兄弟が含まれます。コンテキストノードが属性ノードまたは名前空間ノードの場合、次の兄弟軸は空です。