您的位置:首页 > Web前端 > HTML

使用lxml+xpath解析html页面

2018-02-04 07:13 429 查看
@待解析的页面

<!DOCTYPE html>
<html lang="en">
<title>Title</title>
<body>

<h1> This is h1 </h1>

<div>
This is fisrt div
<div>劳资是1.1</div>
</div>

<div id="divid">
<img src="1111.png"/>
<span id="sp1"> desc 1111.png </span>

<img src="2222.png"/>
<span id="sp2"> desc 2222.png </span>

<p>
<a href="http://www.xxxxx.com/"> link-of-xxxxxx </a>
</p>

<a href="http://www.yyyyyyy.com/"> link-of-yyyyyyyyy </a>
<br/>
<a href="http://www.zzzzzzz.com/"> link-of-zzzzzzzzz </a>

</div>

<p class="p_classname"> This is p with class name </p>

<div class="div_classname">
This is div with class name
<div>劳资是3.1</div>
</div>

</body>
</html>


@解析获得元素树etree

# 生成元素树etree
html = etree.HTML(page_text)  # 解析文本
html = etree.parse("./page.html")  # 解析文件

print(type(html))  # <class 'lxml.etree._ElementTree'>
print(etree.tostring(html, pretty_print=True))  # 整理格式


@根据具体业务寻找元素内容

# 找出所有div元素,列表
'''
obj = html.xpath('//div')
# print(obj)
print(type(obj[0]))

for i in obj:
print(i)
'''

# 所有拥有id属性的div元素集合,列表
'''
element_list = html.xpath('//div[@id]')
print(element_list)
print(element_list[0])
'''

# 所有class属性为div_classname的div元素列表
'''
element_list = html.xpath("//div[@class='div_classname']")
print(element_list)
'''

# 所有属性非空的div元素列表
'''
element_list = html.xpath("//div[@*]")
print(element_list)
'''

# 所有属性【为空】的div元素列表(对非空表述取反)
'''
element_list = html.xpath("//div[not(@*)]")
print(element_list)
'''

# 最后一个div元素,类型列表
'''
element_list = html.xpath("//div[last()]")
print(element_list)
'''

# 倒数第2个div元素,类型列表
'''
element_list = html.xpath("//div[last()-1]")
print(element_list)
'''

# 最前面2个的div元素
'''
element_list = html.xpath("//div[position() < 3]")
print(element_list)
'''

# 所有a标签的href属性值,列表
'''
element_list = html.xpath("//a/@href")
# print(element_list)
for i in element_list:
print(i)
print(type(i))
'''

# 第2个div标签下一层所有a的href属性值,列表
'''
element_list = html.xpath("//div[2]/a/@href")
print(element_list)
'''

# 第2个div标签以下以下所有层面a的href属性值
'''
element_list = html.xpath("//div[2]//a/@href")
print(element_list)
'''

# 第2个div标签下第1个span的id属性值
'''
element_list = html.xpath("//div[2]/span[1]/@id")
print(element_list)
'''

# 【所有div元素】及【所有p元素】
# 顺序是完全自上而下的,找到div就是div,找到p就是p
'''
element_list = html.xpath("//div | //p")
print(element_list)
for e in element_list:
print(e)
'''

# 最后一个div元素的所有一级子div的文本列表
'''
ret = html.xpath("//div[last()]/div/text()")
print(ret)
'''
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: