要素のXPATHを返す関数を作成しようとしています。残念ながら、それは十分ではない絶対xpathを返します。要素の最小XPathを取得
可能な限り最小限のxpathを取得したい(または、より良い "賢い"、必ずしも最小限ではない)。たとえば、elementにidがある場合、return xpathはそのidに依存します。
私はこのxpathを複数回使用したいと思います。絶対パスxpathはページの変更によって非常に脆弱です。
親がidを持つ場合は、idで親のxpathを返し、/child
と連結します。
lxml
モジュールまたは別のモジュールで可能ですか?
たとえば、XPathヘルパーウィザード拡張子でこれを行うことができます。
def _load_root(url):
r = requests.get(url)
r.encoding = 'utf-8'
html = r.content
return etree.fromstring(html, etree.HTMLParser())
def get_xpath_by_text(text,url):
root = _load_root(url)
e = root.xpath('.//*[contains(text(),"{}")]'.format(text))
print root.getpath(e)
/HTML /本体/ DIV [1]/DIV [1]/DIV [1]/DIV [2]/DIV [1]/DIV [1]/DIV [2]/DIV/div [2]/div [1]/div [1]/div/div [1]/div [2]/div [ 2]/div [1]
あなたはその方法を知っていますか?
は答えをあなたにマイケルをありがとうございました。私は、達成したいことに最も近いものとして、「最小限のパス」という用語を見つけました。あなたの答えはIDの問題を解決しますが、はるかに多くの状況があります。例えば、class = "price"やitemprop = "price"などのように非常に一般的です。したがって、IDには何も依存しません(これは最良のオプションです)。パス。 –