@nemos
2017-05-06T02:02:21.000000Z
字数 2051
阅读 792
py
<bookstore>
<book>
<title>Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
</bookstore>
- 表达式 = 描述
- nodename = 选取此节点所有的子节点
- / = 从根节点开始选取
- // = 选取此节点下所有节点不考虑其相对位置
- . = 选取当前节点
- .. = 选取当前节点的父节点
- @ = 选取属性
- 路径表达式 = 结果
- bookstore = 选取bookstore元素所有子节点
- /bookstore = 选取元素bookstore
- / = 由/开始始终表示绝对路径
- bookstore/book = 选取属于bookstore节点的所有book元素
- //book = 选取所有book元素不管他们在文档中位置
- bookstore//book = 选取所有属于bookstore元素的后代元素,不管他们在bookstore下的什么位置
- //@lang = 选取名为lang的所有属性
- 查找某个特定节点或包含某个特定值的节点
- 谓语被嵌在方括号中
* 路径表达式 = 结果
* /bookstore/book[1] = 选取bookstore下的第一个book元素
* /bookstore/book[last()] = 选取bookstore下的最后一个book元素
* /bookstore/book[last()-1] = 选取bookstore下的倒数第二个book元素
* /bookstore/book[position()<3] = 选取bookstore下的前前两个book元素
* //title[@lang] = 选取所有拥有lang属性的title元素
* //title[@lang ='eng'] = 选取所有拥有title属性且值为eng的title元素
* bookstore/book[price>10.00]/title = 不解释
- 通配符 = 描述
- '*' = 匹配任何元素节点
- @* = 匹配任何属性节点
- node() = 匹配任何类型的节点
- | = 选取若干路径
- 表达式 = 结果
- //title[@*] = 选取所有带属性的title元素
- //title | //price = 选取所有title和price元素
<div>
<ul>
<li class="item-0"><a href="link1.html">first item</a></li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-inactive"><a href="link3.html">third item</a></li>
<li class="item-1"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a>
</ul>
</div>
from lxml import etree
html = etree.HTML(text) #初始化html对象并优化
html = etree.parse(file.txt) #从文件中初始化html对象
result = etree.tostring(html) #转换字符串
lxml.etree._ElementTree = etree.HTML(text)
resultlist = lxml.etree._ElementTree.xpath('//li')
type(resultlist[0]) = lxml.etree._Element
valuelist = html.xpath('//li/@class') #获得所有li标签的class属性的值
lxml.etree._Element = html.xpath('//li/a[@href="link1.html"]') #获得特定值得a标签
lxml.etree._Element = html.xpath('//*[@class="bold"]') #获得所有class属性值为bold的元素
lxml.etree._Element.tag #获得标签名
lxml.etree._Element.text #获得元素内容