使用lxml+xpath解析html页面

@待解析的页面

<!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)
'''

 

版权声明:本文为CSDN博主「水木·圳烜」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u010986776/article/details/79250788

 

说点什么

avatar
  Subscribe  
提醒