'''
/ 代表逐层提取 实例 提取标题 /html/head/title
text() 提取标签下的文本 实例 提取标题文本 /html/head/title/text()
//标签名 提取所有名为**的标签 实例 提取所有div标签 //div
//标签名[@属性=‘属性值’] 提取属性名为**的标签 实例 提取div中<div class="tools">标签内容 //div[@class="tools"]/text()
@属性名 代表某个属性名 实例 提取新_我的订单 //ul[@class="ddnewhead_gcard_list"]/li/a/@dd-name
'''
'''
路径用法
谓语
/li/a[1] 即选取属于 li 标签下 第一个 a元素
/li/a[last()] 即选取属于 li 标签下 最后一个 a元素
/li/a[last()-1] 即选取属于 li 标签下 倒数第二个 a元素
/li/a[position()<3] 即选取属于 li 标签下 前两个 a元素
/li/a[price>35.00] 即选取属于 li 标签下 a元素中pprice大于的元素
'''
'''
通配符
* 匹配任意节点
@* 匹配任意节点中的任何属性
| 选取多个路径 /li/a | /li/a/text() 选取所有 a元素 和 a元素下的文本信息
'''
from lxml import html
text = '''
<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>
'''
txt =html.etree.HTML(text)
print(txt)
result = html.tostring(txt).decode('utf-8')
print(result)
'''#从文件中提取
txt=html.etree.parse('文件名')
result=html.etree.tostring(txt).decode('utf-8')
print(result)'''
from lxml import html
text='''
<html><body><p>html
<!-- hello.html -->
</p><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"><span class="bold">third item</span></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></li>
</ul>
</div></body></html>
'''
txt=html.etree.HTML(text)
result=txt.xpath('//ul/li')
'''这里的的txt必须是html 的 格式 才能用xpath提取 得到的是一个列表'''
'''' 得到的像这样 <Element li at 0x2d414722188> 是一个元素,它的类型是'lxml.etree._Element' 需要用 html.tostring() 取出内容
因为这个标签下有很多内容 所以返回的是这个 如果路径具体的话就不会是这个 而是具体的内容 '''
for i in range(0,len(result)):
realresult = html.tostring(result[i]).decode('utf-8')
print(realresult)
result=txt.xpath('//ul/li/@class')
print(result)
result=txt.xpath('//ul/li[2]/a/@href')
print(result)
result=txt.xpath('//ul/li/a/span')
print(result)
result=txt.xpath('//ul/li/a//@class')
print(result)
result=txt.xpath('//ul/li[last()]/a/@href')
print(result)
result=txt.xpath('//ul/li[last()-1]/a')
print(result[0].text)
result=txt.xpath('//ul/li[last()-1]/a/text()')
print(result)