Python爬虫实战教程:lxml模块的详细学习及实际应用

学习目标

  • 掌握使用lxml库提取数据的方法。
  • 理解lxml在数据处理后提取的数据类型。
  • 学习将元素(element)转换为字符串的方法。
  • 1. lxml的安装

    通过以下命令安装lxml库:

    pip install lxml
    

    2. lxml的使用

    2.1 基础使用
  • 导入lxml的etree库:
    from lxml import etree
    
  • 将字符串转换为Element对象,并使用xpath方法提取数据:
    html = etree.HTML(text)
    ret_list = html.xpath("xpath字符串")
    
  • 将Element对象转换为字符串(bytes类型):
    etree.tostring(element)
  • 示例

    假设有以下HTML内容,我们将对其进行操作:

    <div> <ul> 
      <li class="item-1"><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> 
    

    使用lxml进行操作的代码如下:

    from lxml import etree
    
    text = """ 
    <div> <ul> ... </ul> </div> """
    
    html = etree.HTML(text)
    print(type(html))
    
    handeled_html_str = etree.tostring(html).decode()
    print(handeled_html_str)
    

    输出结果:

    <class 'lxml.etree._Element'>
    <html><body><div> ... </div> </body></html>
    

    注意:lxml能够补充缺失的标签,但在数据提取时可能遇到问题。使用etree.tostring方法可以观察lxml处理后的HTML结构。

    2.2 进阶练习

    假设每个class为item-1li标签代表一条新闻数据,我们将这些数据组成字典。

    from lxml import etree
    
    text = """ 
    <div> <ul> ... </ul> </div> """
    
    html = etree.HTML(text)
    
    # 获取所有`li`标签的`href`和标题
    href_list = html.xpath("//li[@class='item-1']/a/@href")
    title_list = html.xpath("//li[@class='item-1']/a/text()")
    
    # 组装新闻数据
    for href in href_list:
        item = {"href": href, "title": title_list[href_list.index(href)]}
        print(item)
    

    输出结果:

    {'href': 'link1.html', 'title': 'first item'}
    {'href': 'link2.html', 'title': 'second item'}
    {'href': 'link4.html', 'title': 'fourth item'}
    
    2.3 进阶使用

    如果提取的是一个节点而非属性或文本,lxml会返回Element对象,可以继续使用xpath方法。

    from lxml import etree
    
    text = """ 
    <div> <ul> ... </ul> </div> """
    
    html = etree.HTML(text)
    li_list = html.xpath("//li[@class='item-1']")
    
    for li in li_list:
        item = {"href": li.xpath("./a/@href")[0] if li.xpath("./a/@href") else None,
                "title": li.xpath("./a/text()")[0] if li.xpath("./a/text()") else None}
        print(item)
    

    输出结果:

    {'href': None, 'title': 'first item'}
    {'href': 'link2.html', 'title': 'second item'}
    {'href': 'link4.html', 'title': 'fourth item'}
    

    小结

  • 安装lxml库:pip install lxml
  • 导入lxml库:from lxml import etree
  • 使用lxml转换和解析HTML:etree.HTML(text)
  • 使用xpath提取数据:data.xpath("//div/text()")
  • 注意lxml提取的数据都是列表类型
  • 对于复杂数据,先提取大节点,再遍历小节点进行操作,即先分组再提取数据
  • 通过上述学习,你应该能够使用lxml库进行基本的数据提取和处理。在实际应用中,你可能需要根据具体情况调整xpath表达式以适应不同的数据结构。

    好书推荐


    《人工智能注意力机制:体系、模型与算法剖析》融合了资深开发工程师多年一线工作经验,从注意力机制这一重要角度入手,阐述注意力机制的产生背景和发展历程,通过详实的理论剖析,以深入浅出的方式着重介绍注意力机制在计算机视觉与自然语言处理两大人工智能方向中的体系、模型与算法,并在最后将注意力机制在其他智能领域的应用加以拓展。内容循序渐进,图文细腻讲解,使读者身临其境,迅速、深入地掌握各种经验和技巧。
    内容简介
    “注意”作为一切思维活动的起点,一直是哲学、心理学和认知神经科学的重点研究对象。随着计算机技术的发展,人类对注意力机制的模拟和应用成为计算机科学领域的热点研究方向——让计算机能够具有类似人类的注意力机制,使其能够有效地应用于对数据的理解和分析。Transformer模型诞生后,注意力机制在人工智能各大重要领域的研究和应用更是如火如荼,成果丰硕。
    《人工智能注意力机制:体系、模型与算法剖析》从注意力机制这一重要角度入手,阐述注意力机制的产生背景和发展历程,通过详实的理论剖析,以深入浅出的方式着重介绍注意力机制在计算机视觉、自然语言处理,以及多模态机器学习三大人工智能方向中的应用思路、模型与算法。
    《人工智能注意力机制:体系、模型与算法剖析》以人工智能相关专业研究人员,特别是计算机视觉与自然语言处理等领域的研发人员作为主要读者对象,一方面帮其梳理技术的发展脉络、开拓思路、构建完整的认知体系;另一方面为其剖析算法原理、深刻理解算法细节。本书提供配套源代码,下载方式见封底。

    购买链接:https://item.jd.com/14544040.html

    作者:是Dream呀

    物联沃分享整理
    物联沃-IOTWORD物联网 » Python爬虫实战教程:lxml模块的详细学习及实际应用

    发表回复