首页 > 编程语言 >24. Python lxml库的安装和使用

24. Python lxml库的安装和使用

时间:2022-09-21 10:00:52浏览次数:72  
标签:24 xpath lxml http Python html HTML com

1.前言

lxml 是 Python 的第三方解析库,完全使用 Python 语言编写,它对 Xpath 表达式提供了良好的支持,因此能够了高效地解析 HTML/XML 文档。本节讲解如何通过 lxml 库解析 HTML 文档。

2. 安装lxml库

lxml 属于 Python 第三方库,因此需要使用如下方法安装:

pip3 install lxml

在 CMD 命令行验证是否安装成功。若引入模块,不返回错误则说明安装成功。

>>> import lxml
>>>

3. lxml使用流程

lxml 库提供了一个 etree 模块,该模块专门用来解析 HTML/XML 文档,下面我们简单介绍一下 lxml 库的使用流程,如下所示:

1) 导入模块

from lxml import etree

2) 创建解析对象

调用 etree 模块的 HTML() 方法来创建 HTML 解析对象。如下所示:

parse_html = etree.HTML(html)

HTML() 方法能够将 HTML 标签字符串解析为 HTML 文件,该方法可以自动修正 HTML 文本。示例如下:

from lxml import etree
html_str = '''
<div>
    <ul>
         <li class="item1"><a href="link1.html">Python</a></li>
         <li class="item2"><a href="link2.html">Java</a></li>
         <li class="site1"><a href="c.biancheng.net">C语言中文网</a>
         <li class="site2"><a href="www.baidu.com">百度</a></li>
         <li class="site3"><a href="www.jd.com">京东</a></li>
     </ul>
</div>
'''
html = etree.HTML(html_str)
# tostring()将标签元素转换为字符串输出,注意:result为字节类型
result = etree.tostring(html)
print(result.decode('utf-8'))

输出结果如下:

<html><body><div>
    <ul>
         <li class="item1"><a href="link1.html">Python</a></li>
         <li class="item2"><a href="link2.html">Java</a></li>
         <li class="site1"><a href="c.biancheng.net">C&#35821;&#35328;&#20013;&#25991;&#32593;</a></li>
         <li class="site2"><a href="www.baidu.com">&#30334;&#24230;</a></li>
         <li class="site3"><a href="www.jd.com">&#20140;&#19996;</a>
     </li></ul>
</div>
</body></html>

上述 HTML 字符串存在缺少标签的情况,比如“语言中文网”缺少一个 </li> 闭合标签,当使用了 HTML() 方法后,会将其自动转换为符合规范的 HTML 文档格式。

3) 调用xpath表达式

最后使用第二步创建的解析对象调用 xpath() 方法,完成数据的提取,如下所示:

r_list = parse_html.xpath('xpath表达式')

4. lxml库数据提取

下面通过一段 HTML 代码实例演示如何使用 lxml 库提取想要的数据。HTML 代码如下所示:

<div class="wrapper">
    <a href="www.biancheng.net/product/" id="site">website product</a>
    <ul id="sitename">
    <li><a href="http://www.biancheng.net/" title="编程帮">编程</a></li>
    <li><a href="http://world.sina.com/" title="新浪娱乐">微博</a></li>
    <li><a href="http://www.baidu.com" title="百度">百度贴吧</a></li>
    <li><a href="http://www.taobao.com" title="淘宝">天猫淘宝</a></li>
    <li><a href="http://www.jd.com/" title="京东">京东购物</a></li>
    <li><a href="http://c.bianchneg.net/" title="C语言中文网">编程</a></li>
    <li><a href="http://www.360.com" title="360科技">安全卫士</a></li>
    <li><a href="http://www.bytesjump.com/" title=字节">视频娱乐</a></li>
    <li><a href="http://bzhan.com/" title="b站">年轻娱乐</a></li>
    <li><a href="http://hao123.com/" title="浏览器">搜索引擎</a></li>
    </ul>
</div>

1) 提取所有a标签内的文本信息

from lxml import etree
# 创建解析对象
parse_html=etree.HTML(html)
# 书写xpath表达式,提取文本最终使用text()
xpath_bds='//a/text()'
# 提取文本数据,以列表形式输出
r_list=parse_html.xpath(xpath_bds)
# 打印数据列表
print(r_list)

输出结果:

['website product', '编程', '微博', '百度贴吧', '天猫淘宝', '京东购物', '编程', '安全卫士', '视频娱乐', '年轻娱乐', '搜索引擎']

2) 获取所有href的属性值

from lxml import etree
# 创建解析对象
parse_html=etree.HTML(html)
# 书写xpath表达式,提取文本最终使用text()
xpath_bds='//a/@href'
# 提取文本数据,以列表形式输出
r_list=parse_html.xpath(xpath_bds)
# 打印数据列表
print(r_list)

输出结果:

['http://www.biancheng.net/product/', 'http://www.biancheng.net/', 'http://world.sina.com/', 'http://www.baidu.com', 'http://www.taobao.com', 'http://www.jd.com/', 'http://c.bianchneg.net/', 'http://www.360.com', 'http://www.bytesjump.com/', 'http://bzhan.com/', 'http://hao123.com/']

3) 不匹配href=" www.biancheng.net/priduct"

from lxml import etree
# 创建解析对象
parse_html=etree.HTML(html)
# 书写xpath表达式,提取文本最终使用text()
xpath_bds='//a/@href'
# 提取文本数据,以列表形式输出
xpath_bds='//ul[@id="sitename"]/li/a/@href'
# 打印数据列表
print(r_list)

输出结果:

['http://www.biancheng.net/', 'http://world.sina.com/', 'http://www.baidu.com', 'http://www.taobao.com', 'http://www.jd.com/', 'http://c.bianchneg.net/', 'http://www.360.com', 'http://www.bytesjump.com/', 'http://bzhan.com/', 'http://hao123.com/']

 

标签:24,xpath,lxml,http,Python,html,HTML,com
From: https://www.cnblogs.com/jiajunling/p/16714587.html

相关文章

  • # Ubuntu22.04安装Python3.9设置软链接
    sudoaptinstallpython3.9测试,命令行中输入python3.9删除原有的外链sudorm/usr/bin/python3创建新的外链sudoln-s/usr/bin/python3.9/usr/bin/python3、......
  • python 文件操作
    文件操作打开:open(file,mode="r",buffering=None,encoding=None,errors=None,newline=None,closefd=True,opener=None)#file文件路径,如果该文件在同......
  • python基础学习
    练习网站:猪八戒;程序员客栈;猿急送;码市;智城外包网;实现网;人人开发;开发邦;电鸭社区;快码;英选;外包大师;智筹;自由职客;解放号;应用:python开发;爬虫开发;数据挖掘;人工智能;自动化测试;自动......
  • Python实验报告——第3章 流程控制语句
    实验报告实例01:判断输入的是不是黄蓉所说的数代码如下:运行结果如下:  实例02:验证瑛姑给出的答案是否正确代码如下: 运行结果如下:  实例03:输出......
  • 用python从网页下载单词库
    从网站下载单词库1每一页有几百个单词2每一个单词有独立的URL,URL中包含单词的中文解释3使用的库requests,pyquery,web#coding:utf-8importrequestsasrqfrom......
  • Python实验报告(第三周)
    实验1:Python语言基础一、实验目的和要求1、学会使用Python的流程控制语句;2、掌握Python的选择语句和循环语句;3、学会运用条件语句和循环语句的嵌套结构。二、实验环境......
  • python学习随笔
    python本周学习随笔一、打开Pycharm,新建项目1.创建名为hello.py文件(Python文件以.py后缀结尾)2.在hello.py中输入以下内容print("helloworld")3.在代码区域右键,选......
  • Python实验报告(第三周)
    一、实验目的和要求1.正确书写python语句2.掌握条件语句的使用3.正确使用序列二、实验环境软件版本:Python3.1064_bit三、实验过程实例01:(省略题目)  结果如下......
  • Python之numpy库(一)
      NumPy(NumericalPython)是科学计算基础库,提供大量科学计算相关功能,比如数据统计,随机数生成等。其提供最核心类型为多维数组类型(ndarray),支持大量的维度数组与矩阵运算,N......
  • python lambda的使用说明
    一用途减少代码冗余没有函数名字,也指匿名函数快速实现函数功能二用法说明:lambdaargument_list:expersionargument_list表示输入传入的参数expersion表......