选取节点
表达式 | 描述 |
---|---|
foo | 选取此节点的所有子节点 |
/ | 根节点选取 |
// | baz |
. | 选取当前节点 |
.. | 选取当前节点的父节点 |
@ | 选取属性 |
<?xml version="1.0" encoding="ISO-8859-1"?> <bookstore> <book> <title lang="eng">Harry Potter</title> <price>29.99</price> </book> <book> <title lang="eng">Learning XML</title> <price>39.95</price> </book> </bookstore>
bookstore | |
---|---|
/bookstore | |
bookstore/book | |
//book | |
bookstore//book | |
//@lang |
谓语
-
查找指定节点(谓语被嵌在方括号中)
/bookstore/book[1] /bookstore/book[last()] /bookstore/book[last()-1] /bookstore/book[position()<3] //title[@lang] //title[@lang='eng'] /bookstore/book/[price>35.00] /bookstore/book[price>35.00]/title -
选取未知节点
* 匹配任何元素节点 @* 匹配任何属性节点 node() 匹配任何类型的节点 -
选取若干路径
//book/title | //book/price //title | //price /bookstore/book/title | //price -
节点关系
父(parent) 每个元素以及属性都有一个父 子(Children) 元素节点可有零个、一个或多个子 同胞(Sibling) 拥有相同的父的节点 先辈(Ancestor) 某节点的父,父的父 后代(Descendant) 某个节点的子,子的子
XPath轴
-
轴可定义相对于当前节点的节点集
轴名称 结果 ancestor 选取当前节点的所有先辈(父、祖父等) ancestor-or-self 选取当前节点的所有先辈(父、祖父等)以及当前节点本身 attribute 选取当前节点的所有属性 child 选取当前节点的所有子元素 descendant 选取当前节点的所有后代元素(子、孙等) descendant-or-self 选取当前节点的所有后代元素(子、孙等)以及当前节点本身 following 选取文档中当前节点的结束标签之后的所有节点 namespace 选取当前节点的所有命名空间节点 parent 选取当前节点的父节点 preceding 选取文档中当前节点的开始标签之前的所有节点 preceding-sibling 选取当前节点之前的所有同级节点 self 选取当前节点 -
步的语法:
轴名称::节点测试[谓语]
例子 结果 child::book 选取所有属于当前节点的子元素的 book 节点 attribute::lang 选取当前节点的 lang 属性 child::* 选取当前节点的所有子元素 attribute::* 选取当前节点的所有属性 child::text() 选取当前节点的所有文本子节点 child::node() 选取当前节点的所有子节点 descendant::book 选取当前节点的所有 book 后代 ancestor::book 选择当前节点的所有 book 先辈 ancestor-or-self::book 选取当前节点的所有 book 先辈以及当前节点(如果此节点是 book 节点) child::*/child::price 选取当前节点的所有 price 孙节点 -
其它
//div[contains(@class,'job_detail')] contains:有时候某个属性中包含了多个值,那么可以使用 contains
函数htmlElement = etree.HTML(text)
print(etree.tostring(htmlElement,encoding='utf-8').decode("utf-8"))解析html字符串:使用 lxml.etree.HTML
进行解析htmlElement = etree.parse("tencent.html")
print(etree.tostring(htmlElement, encoding='utf-8').decode('utf-8'))解析html文件:使用 lxml.etree.parse
进行解析
网友评论