from lxml import etree
text = '''
     <ul id='ultest'>
         <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'><span>fourth item</span></a></li>
         <li class='item-0'><a href='link5.html'>fifth item</a> # 注意,此处缺少一个 </li> 闭合标签
    </ul>

#调用HTML类进行初始化,这样就成功构造了一个XPath解析对象。
page = etree.HTML(text)   
# 打印输出第三个li标签
print(page.xpath('//li[3]'))

#打印输出li标签下所有属性节点:
li_list = page.xpath('//li')
for li in li_list:
    print(li.attrib)

#打印输出a标签的内容,用text()
a_list = page.xpath('//a')
for a in a_list:
    print(a.text)

#打印输出ul标签下的所有内容,用string()
ul = page.xpath('//ul')[0]
print(ul.xpath('string()'))

示例代码说明:

  1. 导入lxml库: from lxml import etree
  2. 定义HTML文本: text 变量包含了需要解析的HTML代码,需要注意的是代码中缺少一个 </li> 闭合标签。
  3. 创建XPath解析对象: page = etree.HTML(text) 使用 etree.HTML() 方法将HTML文本解析成一个XPath解析对象。
  4. 提取特定节点信息:
    • page.xpath('//li[3]'): 提取第三个li标签,并打印输出
    • page.xpath('//li'): 提取所有li标签,并遍历打印输出每个li标签的属性
    • page.xpath('//a'): 提取所有a标签,并遍历打印输出每个a标签的内容
    • page.xpath('//ul')[0].xpath('string()'): 提取第一个ul标签,并使用 string() 方法提取ul标签下的所有内容

总结:

通过使用lxml etree库,我们可以方便地解析HTML文档,并使用XPath表达式提取特定节点信息。这对于网页数据爬取和分析非常有用。

Python lxml etree库解析HTML示例

原文地址: https://www.cveoy.top/t/topic/n0zQ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录