• Python 文档解析:lxml库的使用


    ✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。
    🍎个人主页:小嗷犬的博客
    🍊个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。
    🥭本文内容:Python 文档解析:lxml库的使用


    Python 文档解析:lxml库的使用


    lxml库简介

    lxml 是 Python 常用的文档解析库,能够高效地解析 HTML/XML 文档,常用于 Python 爬虫

    lxml 为第三方库,需要我们通过pip命令安装:

    pip install lxml
    
    • 1

    lxml库方法介绍

    lxml 库提供了一个 etree 模块,该模块专门用来解析 HTML/XML 文档,让我们先导入模块:

    from lxml import etree
    
    • 1

    使用 etree 模块的 HTML() 方法可以创建 HTML 解析对象:

    from lxml import etree
    
    parse_html = etree.HTML(html)
    
    • 1
    • 2
    • 3

    HTML() 方法能够将 HTML 标签字符串解析为 HTML 文件,并且可以自动修正 HTML 文本:

    from lxml import etree
    
    html_str = '''
    
    '''
    
    html = etree.HTML(html_str)
    # tostring()将标签元素转换为字符串输出,注意:result为字节类型
    result = etree.tostring(html)
    print(result.decode('utf-8'))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    上述代码我故意在Java那一行少写一个

  • ,可以看到输出会自动补全:

    <html><body><div>
        <ul>
            <li><a href="www.python.org">Pythona>li>
            <li><a href="www.java.com">Javaa>li>
            <li><a href="www.csdn.net">CSDNa>li>
        ul>
    div>
    body>html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    解析为 HTML 文件后,我们可以使用 xpath() 方法来提取我们需要的数据了:

    from lxml import etree
    
    html_str = '''
    
    '''
    
    html=etree.HTML(html_str)
    
    xpath_bds='//@href'
    
    r_list = html.xpath(xpath_bds)
    
    print(r_list)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    xpath() 方法使用一个 XPath 表达式作为参数,上面那段程序提取出了页面里的所有网址。

    详细的 XPath 表达式语法,请参见菜鸟教程:
    https://www.runoob.com/xpath/xpath-syntax.html


    代码实例

    lxml 库在爬虫中的使用大概就是这么多了,接下让我们结合前一篇文章(Python 网页请求:requests库的使用),来写一个普通的爬虫程序吧:

    import os
    import sys
    import requests
    from lxml import etree
    
    x = requests.get('https://www.csdn.net/')
    
    
    html = etree.HTML(x.text)
    
    xpath_bds = '//img/@src'
    
    img_list = html.xpath(xpath_bds)
    
    # 创建img文件夹
    os.chdir(os.path.dirname(sys.argv[0]))
    
    if not os.path.exists('img'):
        os.mkdir('img')
        print('创建文件夹成功')
    else:
        print('文件夹已存在')
    
    # 下载图片
    for i in range(len(img_list)):
        img = requests.get(img_list[i]).content
        if img_list[i].endswith('.jpg'):
            with open(f'./img/{i}.jpg', 'wb') as f:
                f.write(img)
        elif img_list[i].endswith('.jpeg'):
            with open(f'./img/{i}.jpeg', 'wb') as f:
                f.write(img)
        elif img_list[i].endswith('.png'):
            with open(f'./img/{i}.png', 'wb') as f:
                f.write(img)
        else:
            print(f'第{i + 1}张图片格式不正确')
            continue
        print(f'第{i + 1}张图片下载成功')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

    这个爬虫程序爬取了CSDN首页的所有.jpg.jpeg.png格式的图片,快来自己尝试一下吧!

  • 相关阅读:
    网络SDK套件:Rebex Total Pack 6.8.0.X FOR NET Crack
    安装配置 zookeeper(单机版)
    ZCMU--1720: 死亡如风,我要装逼
    微服务技术栈-Gateway服务网关
    flex-shrink 解决实际问题(flex-shrink:0避免图片被压扁)
    既然有了量化交易,技术分析还有存在的必要么?有专门收割自动交易系统的策略吗?
    [Linux] yum安装软件
    webpack基础教程
    【智能优化算法】基于阴阳对优化算法求解单目标优化问题附matlab代码 Yin Yang Pair Optimization
    【JavaScript】JS执行机制以及三种对象讲解
  • 原文地址:https://blog.csdn.net/qq_63585949/article/details/126755821