【Python】【进阶篇】十三、Python爬虫的lxml库的安装和使用

目录

  • 十三、Python爬虫的lxml库的安装和使用
    • 13.1 安装lxml库
    • 13.2 lxml使用流程
      • 13.2.1 导入模块
      • 13.2.2 创建解析对象
      • 13.2.3 调用xpath表达式
    • 13.3 lxml库数据提取
      • 13.3.1 提取所有a标签内的文本信息
      • 13.3.2 获取所有href的属性值
      • 13.3.3 不匹配href=" www.biancheng.net/priduct"

十三、Python爬虫的lxml库的安装和使用

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

13.1 安装lxml库

lxml 属于 Python 第三方库,这里我们使用 pip 方法安装:

pip3 install lxml

13.2 lxml使用流程

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

13.2.1 导入模块

from lxml import etree

13.2.2 创建解析对象

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

parse_html = etree.HTML(html)

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

上面代码的运行结果如下 -

<html><body><div>
    <ul>
         <li class="item1"><a href="link1.html">Pythona>li>
         <li class="item2"><a href="link2.html">Javaa>li>
         <li class="site1"><a href="c.biancheng.net">Ca>
         li><li class="site2"><a href="www.baidu.com">a>li>
         <li class="site3"><a href="www.jd.com">a>li>
     ul>
div>
body>html>

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

13.2.3 调用xpath表达式

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

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

13.3 lxml库数据提取

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

<div class="wrapper">
    <a href="www.biancheng.net/product/" id="site">website producta>
    <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>li>
    <li><a href="http://bzhan.com/" title="b站">年轻娱乐a>li>
    <li><a href="http://hao123.com/" title="浏览器">搜索引擎a>li>
    ul>
div>

13.3.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', '编程', '微博', '百度贴吧', '天猫淘宝', '京东购物', '编程', '安全卫士', '视频娱乐', '年轻娱乐', '搜索引擎']

13.3.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/']

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

from lxml import etree

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

你可能感兴趣的:(Python,#,爬虫,python,爬虫,开发语言)