HTMLページ内のすべてのノードのXPATHを提供できるライブラリはありますか?
hTMLページのすべてのノードのXPATHを提供できるライブラリはありますか
はい、このHTMLページが整形式のXMLドキュメントである場合。
「ノード」で理解する内容に応じて...
//*
ドキュメント内のすべての要素を選択します。
/descendant-or-self::node()
すべての要素、テキストノード、処理命令、コメントノード、およびルートノード/
。
//text()
ドキュメント内のすべてのテキストノードを選択します。
//comment()
ドキュメント内のすべてのコメントノードを選択します。
//processing-instruction()
ドキュメント内のすべての処理命令を選択します。
//@*
ドキュメント内のすべての属性ノードを選択します。
//namespace::*
ドキュメント内のすべての名前空間ノードを選択します。
最後に、共用体(|
)演算子。
したがって、次の式は実際に任意のXMLドキュメントの「すべてのノード」を選択すると考えています。
/descendant-or-self::node() | //@* | //namespace::*
これが他の誰かに役立つ場合、python/lxmlを使用している場合は、最初にツリーが必要です。次に、上記のDimitreがリストしたXPATHパスでそのツリーを照会します。
ツリーを取得するには:
import lxml
from lxml import html, etree
your_webpage_string = "<html><head><title>test<body><h1>page title</h3>"
bad_html = lxml.html.fromstring(your_webpage_string)
good_html = etree.tostring(root, pretty_print=True).strip()
your_tree = etree.fromstring(good_html)
all_xpaths = your_tree.xpath('//*')
最後の行で、「// *」を任意のxpathに置き換えます。 all_xpaths
は、次のようなリストになりました。
[<Element html at 0x7ff740b24b90>,
<Element head at 0x7ff740b24d88>,
<Element title at 0x7ff740b24dd0>,
<Element body at 0x7ff740b24e18>,
<Element h1 at 0x7ff740b24e60>]