htmlのこのスニペットでaのhref値を取得するにはどうすればよいですか?xpath/pythonを使用して特定のノードの親を選択してください
私はこれを試してみましたが、何の結果に
foo_links = tree.xpath('//a[i/@class="foobar"]')
htmlのこのスニペットでaのhref値を取得するにはどうすればよいですか?xpath/pythonを使用して特定のノードの親を選択してください
私はこれを試してみましたが、何の結果に
foo_links = tree.xpath('//a[i/@class="foobar"]')
を取得していないのですあなたのコードは私のために仕事をして
<!--
<a href="https://link.com" target="_blank"><i class="foobar"></i> </a>
-->
それは私のタグに、そのクラスに基づいて取得する必要があります - それはリストを返します<a>
あなたがhref
のリストは、要素そのものじゃないしたい場合は、/@href
を追加します。
hrefs = tree.xpath('//a[i/@class="foobar"]/@href')
あなたはまた、最初に戻って<a>
秒に取得する/parent::*
(または単に/..
)を使用し、その後、<i>
Sを見つけることができます。
hrefs = tree.xpath('//a/i[@class="foobar"]/../@href')
# ^ ^^
# | | obtain the 'href'
# | |
# | get the parent of the <i>
# |
# find all <i class="foobar"> contained in an <a>.
これらのすべてがうまくいかない場合は、ドキュメントの構造が正しいかどうかを確認したい場合があります。
XPathはコメント<!-- -->
の中を覗いていないことに注意してください。 <a>
が実際にコメント<!-- -->
の中にある場合、最初に手動で文書を抽出する必要があります。
hrefs = [href for comment in tree.xpath('//comment()')
# find all comments
for href in lxml.html.fromstring(comment.text)
# parse content of comment as a new HTML file
.xpath('//a[i/@class="foobar"]/@href')
# read those hrefs.
]
あなたは、そのターゲット要素がHTML
コメントであることに注意すべきです。 <a>
からのコメントとXPath
のように"//a"
のように単純に得ることはできません。この場合はノードではなく、単純な文字列です。コードの下
試してみてください。
import re
foo_links = tree.xpath('//comment()') # get list of all comments on page
for link in foo_links:
if '<i class="foobar">' in link.text:
href = re.search('\w+://\w+.\w+', link.text).group(0) # get href value from required comment
break
P.S.より複雑な正規表現を使用してリンクに一致させる必要があるかもしれません。URL
これは最善の動作をしているようです。コメント/ <! - は大雑把なものです。 URLの残りの部分を取得するために余分な。\ w +を追加しました。何らかの理由で、私は一度に1つのレコードしか取得しません。実行するたびに別のレコードを取得します。おそらく、私が作成しているリストに追加する私といくつかの問題。ありがとうございました –
'break'を削除しました。 –
'// a/@ href'だけではなく、なぜ好奇心が強いのですか? – SomeDude
@svasa OPは "*私はタグでそのクラスに基づいて取得する必要があります*" – kennytm
Okは見ていませんでした。とった。 – SomeDude