美文网首页linux运维
python爬虫-09-python数据提取之lxml库,让你精

python爬虫-09-python数据提取之lxml库,让你精

作者: 运维家 | 来源:发表于2022-05-27 21:26 被阅读0次

lxml是一种使用Python编写的库,可以迅速、灵活地处理XMLHTML,使用XPath语法来进行文件格式解析。

上一篇中我们了解了如何使用XPath找到有效数据具体的定位,但是没有提起如何在Python中使用,那么本文就将LxmlXPath进行两者结合,让你能精准的从复杂的Html代码中提取到你想要的数据。

1、Lxml安装

pip install lxml

或者使用国内地址进行加速下载:

pip install lxml -i https://pypi.tuna.tsinghua.edu.cn/simple

2、介绍

  • 可以补全Html代码
  • 可以准确定位数据
  • 可以读取文件中的代码
  • 官方地址:https://lxml.de/index.html

3、使用Lxml补全Html代码

例如:

from lxml import etree

jier = """<head>
    <meta charset="UTF-8">
    <title>运维家</title>
</head>
<body>
<h1>过零丁洋</h1>
<p>惶恐滩头说惶恐,零丁洋里叹零丁。</p><p>人生自古谁无死,留取丹心照汗青。</p>"""

suner = etree.HTML(jier)
Finally = etree.tostring(suner, encoding="utf-8", pretty_print=True, method="html").decode("utf-8")  # 通过编码再解码的方式可以展示中文
# Finally = etree.tostring(suner)  # 如果html中是存英文,就直接这样子就OK了
print(Finally)

输出结果如下:

<html>
<head>
    <meta charset="UTF-8">
    <title>运维家</title>
</head>
<body>
<h1>过零丁洋</h1>
<p>惶恐滩头说惶恐,零丁洋里叹零丁。</p>
<p>人生自古谁无死,留取丹心照汗青。</p>
</body>
</html>

可以看到它给我们自动补全了html标签,以及我们写了一半的body标签。

4、从文件中读取Html代码

我们新建一个ceshi.html文件,里面内容如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>运维家</title>
</head>
<body>
<h1>过零丁洋</h1>
<p>惶恐滩头说惶恐,零丁洋里叹零丁。</p>
<p>人生自古谁无死,留取丹心照汗青。</p>
</body>
</html>

使用lxml读取:

from lxml import etree

jier = etree.parse('ceshi.html')
suner = etree.tostring(jier)
print(suner)

如果使用上面的代码来读取的话会报错如下:

Traceback (most recent call last):
  File "C:\Users\22768\Desktop\python\python爬虫\002-request+Lxml.py", line 129, in <module>
    jier = etree.parse('ceshi.html')
  File "src\lxml\etree.pyx", line 3536, in lxml.etree.parse
  File "src\lxml\parser.pxi", line 1876, in lxml.etree._parseDocument
  File "src\lxml\parser.pxi", line 1902, in lxml.etree._parseDocumentFromURL
  File "src\lxml\parser.pxi", line 1805, in lxml.etree._parseDocFromFile
  File "src\lxml\parser.pxi", line 1177, in lxml.etree._BaseParser._parseDocFromFile
  File "src\lxml\parser.pxi", line 615, in lxml.etree._ParserContext._handleParseResultDoc
  File "src\lxml\parser.pxi", line 725, in lxml.etree._handleParseResult
  File "src\lxml\parser.pxi", line 654, in lxml.etree._raiseParseError
  File "ceshi.html", line 6
lxml.etree.XMLSyntaxError: Opening and ending tag mismatch: meta line 4 and head, line 6, column 8

Process finished with exit code 1

错误提示说的是代码中,第4行有问题,经过检查之后,难不成要改成如下样子的Html代码嘛?

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8"/>
    <title>运维家</title>
</head>
<body>
<h1>过零丁洋</h1>
<p>惶恐滩头说惶恐,零丁洋里叹零丁。</p>
<p>人生自古谁无死,留取丹心照汗青。</p>
</body>
</html>

果然,当我们改成这样子就好了,在第4行后面添加一个斜杠。。。真是无语他妈妈给他开门。。。

但是呢,我们从网页爬取的Html代码为什么要写这个反斜杠呢?本来就可以省略的嘛,难道我们爬取下来之后还要经过处理咋地,明显不现实嘛。。。然后经过我们的多次尝试之后,发现了如下的代码是可以的:

from lxml import etree

jier = etree.HTMLParser(encoding='utf-8')
jier_2 = etree.parse('ceshi.html', parser=jier)
suner = etree.tostring(jier_2, encoding="utf-8", pretty_print=True, method="html").decode("utf-8")
print(suner)

输出结果也是没问题的,如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>运维家</title>
</head>
<body>
<h1>过零丁洋</h1>
<p>惶恐滩头说惶恐,零丁洋里叹零丁。</p>
<p>人生自古谁无死,留取丹心照汗青。</p>
</body>
</html>

5、在Lxml中使用XPath语法

优化下我们的ceshi.html文件,让素材更加丰富,优化之后代码如下;

剩余内容请转至VX公众号 “运维家” ,回复 “171” 查看。

------ “运维家” ,回复 “171”  ------

------ “运维家” ,回复 “171”  ------

------ “运维家” ,回复 “171”  ------

在Linux中的命令,linux实时线程,linux中tail,如何调用linux的epoll,linux无故多出很多进程,linux怎么打开xls文件,linux怎样用命令打开软件,程序员要不要装linux系统,LINUX通用链表实例;

usb无法安装linux,类似安卓linux,在linux中压缩解压命令,512老电脑linux,linux中退出根目录,linux自定义自启的脚本,linux管理员用户名是,新装的linux网卡配置,linux修改u盘权限失败,c语言linux下开发软件。

相关文章

  • python爬虫-09-python数据提取之lxml库,让你精

    lxml是一种使用Python编写的库,可以迅速、灵活地处理XML和HTML,使用XPath语法来进行文件格式解析...

  • python爬虫系列(3)- 网页数据解析(bs4、lxml、J

    python爬虫系列(3)- 网页数据解析(bs4、lxml、Json库) 本文记录解析网页bs4、lxml、Js...

  • python语法基础 requests库 lxml库,用lxml中的 etree 进行网页数据定位爬取 通过pip...

  • Python解析库

    Python解析库 目录一、lxml库二、BeautifulSoup库三、PyQuery库 一、lxml库 教程:...

  • 爬虫入门1

    爬虫三大库 request、BeautifulSoup、lxml库 推荐使用lxml作为解释器,其效率高 使用请求...

  • python学习第四天

    1.爬虫 大数据 , 提取本地hmtl中的数据 步骤①新建html文件②读取③使用lxml中的xpath语法进行提...

  • python3解析库lxml

    python3解析库lxml 阅读目录 1、python库lxml的安装2、XPath常用规则 读取文本解析节点 ...

  • Python与数据库-网络爬虫存储

    Python与数据库-网络爬虫存储 @(数据科学)[小树枝来了, 帮助, Markdown, 网络爬虫, 数据存储...

  • 爬虫秘籍第二式

    主要内容 poython爬虫第二式以及“跨界”爬Lxml爬虫和Xpath语法:首先是Lxml库的使用from Lx...

  • golang:xpath选择器htmlquery简单用法

    在做爬虫时,经常要用到html解析器提取数据,Python里面有神器lxml,go里面可以选择htmlquery或...

网友评论

    本文标题:python爬虫-09-python数据提取之lxml库,让你精

    本文链接:https://www.haomeiwen.com/subject/vsdwprtx.html