是否有一个库可以为HTML页面中的所有节点提供XPATH?
答案 0 :(得分:37)
有没有可以给我的图书馆 HTML页面中所有节点的XPATH
是的,如果此HTML页面是格式正确的XML文档。
取决于您对“节点”...
的理解//*
选择文档中的所有元素。
/descendant-or-self::node()
选择所有元素,文本节点,处理指令,注释节点和根节点/
。
//text()
选择文档中的所有文本节点。
//comment()
选择文档中的所有注释节点。
//processing-instruction()
选择文档中的所有处理说明。
//@*
选择文档中的所有属性节点。
//namespace::*
选择文档中的所有命名空间节点。
最后,您可以使用union(|
)运算符组合上述任何表达式。
因此,我认为以下表达式确实选择了任何XML文档的“所有节点”:
/descendant-or-self::node() | //@* | //namespace::*
答案 1 :(得分:1)
如果这对其他人有用,如果您使用的是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>]