Python爬虫通过爬取CSDN博客信息,学习lxml库与XPath语法

网友投稿 833 2022-05-30

lxml库

lxml是Python的一个解析库,专门用于解析XML与HTML,支持XPath解析方式。由于lxml库的底层是使用C语言编写的,所以其解析效率非常的高。

在我们后面讲解使用该库之前,我们需要安装该库。一般通过如下命令进行安装即可,代码如下:

pip install lxml

lxml基本用法

既然,lxml库支持解析XML以及HTML,那么肯定就需要学会这2种文档的解析方式。下面,我们来分别讲解。

解析XML文件

首先,我们需要使用lxml库解析XML文件,这里XML文件其实有很多种类,这里博主随便定义一个XML进行解析。

XML代码如下:

21 21

解析示例代码如下所示:

from lxml import etree tree = etree.parse("lxml_xml.xml") print(str(etree.tostring(tree, encoding='utf-8'), 'utf-8')) root = tree.getroot() print("根节点", root.tag) children = root.getchildren() for child in children: print("sex:", child[0].text) print("class :", child.get('class'))

运行之后,效果如下所示:

解析HTML文件

解析HTML比XML稍微复杂一点,它需要创建一个HTMLParser()对象传入到parser()方法中,因为其默认是解析XML的。

HTML代码如下:

我是一个测试页面

解析代码如下所示:

from lxml import etree parser = etree.HTMLParser() tree = etree.parse('demo.html', parser) root = tree.getroot() result = etree.tostring(root, encoding='UTF-8', pretty_print=True, method='html') print(root.tag) children = root.getchildren() print("语言:", children[0].get('lang')) print(root[0][1].text)

运行之后,效果如下所示:

XPath

估计细心的小伙伴,已经看出lxml库直接使用的弊端了。因为这是小编写的一个简单的HTML与XML,所以它的层级很低。

如果是真实的网页,那么可能层级会很多,如果还按数组这样一层一层往下查找,估计能搞出个十几维的数组。这样太复杂了。

所以,这里我们需要引入XPath进行辅助解析。

什么是XPath

XPath于1991年11月6日称为W3C标准,它被设计为可以在XSLT、XPointer以及其他XML解析软件中使用,其中文文档为:

https://www.w3school.com.cn/xpath/index.asp

XPath全称XML Path Language,中文叫XML路径语言,它是一种在XML文档中查询信息的语言。

最初虽然只支持XML文件,但是后来随着版本的迭代,已经可以支持HTML文件的解析与搜索,因为HTML与XML同源。

XPath语法

XPath语言的基本语法就是多级目录的层级结构,但比数组那种容易理解的多。下表是博主归纳总结的XPath语法规则:

XPath实战

既然,我们已经了解XPath具体的语法结构,那么我们将一一实战这些语法,让读者更清晰,更快捷的掌握。

测试HTML文件如下所示:

我是一个测试页面

选取某节点的所有子孙节点

假设我们需要获取上面HTML文件中

上一篇:项目上线后,如何减少客户对交付成果的质疑
下一篇:四大网络抓包神器,总有一款适合你~
相关文章