Python: ローカルまたは特定の要素で xpath を使用する 質問する

Python: ローカルまたは特定の要素で xpath を使用する 質問する

私は xpath を使用してページからリンクを取得しようとしています。問題は、テーブル内のリンクのみが必要なのに、ページ全体に xpath 式を適用すると、不要なリンクが取得されてしまうことです。

例えば:

tree = lxml.html.parse(some_response)
links = tree.xpath("//a[contains(@href, 'http://www.example.com/filter/')]")

問題は、式をドキュメント全体に適用することです。必要な要素を見つけました。たとえば、次のとおりです。

tree = lxml.html.parse(some_response)
root = tree.getroot()
table = root[1][5] #for example
links = table.xpath("//a[contains(@href, 'http://www.example.com/filter/')]")

しかし、テーブル外のリンクをまだキャプチャしているため、ドキュメント全体でもクエリを実行しているようです。このページ「xpath() が要素で使用される場合、XPath 式は要素 (相対の場合) またはルート ツリー (絶対の場合) に対して評価されます」と書かれています。つまり、私が使用しているのは絶対式であり、それを相対式にする必要があるということですか? これでいいのでしょうか?

基本的に、このテーブル内に存在する要素のみをフィルタリングするにはどうすればよいでしょうか?

ベストアンサー1

xpathはスラッシュ( )で始まるため絶対パスです。現在の要素に対して相対パスにするには、前に/ドット( )を追加します。.

links = table.xpath(".//a[contains(@href, 'http://www.example.com/filter/')]")

おすすめ記事