Lxml

Posted jcjc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Lxml相关的知识,希望对你有一定的参考价值。

  Lxml 是基于 libxml2 这一 XML解析库的 Python 封装。该模块使用 C 语言编写,解析速度比 Beautiful Soup 更快,不过安装过程也更为复杂,最新的安装说明可以参考 http;//Lxml.de/indtallation.html.

  和 Beautiful Soup 一样,使用 Lxml 模块的第一步也是将有可能不合法的 HTM 解析为统一格式,下面是使用该模块解析统一个不完整 HTML 的例子。

>>> import lxml.html
>>> broken_html = <ul class=country><li>Area <li>Population </ul>
>>> tree = lxml.html.fromstring(broken_html)
>>> fixed_html = lxml.html.tostring(tree, pretty_print = True)
>>> print(fixed_html)
b<ul class="country">\\n<li>Area </li>\\n<li>Population </li>\\n</ul>\\n

lxml 和 Beautiful Soup 一样也可以正确解析两侧缺失是我引号,并闭合标签,不过该模块没有添加<html> 和 <boby> 标签。

解析完输入内容后,进入选择元素的步骤,此时 lxml 有几种不同的方法,比如 XPath 选择器和类似 Beautiful Soup 的 find() 方法。

下面使用 lxml 的 CSS 选择器抽取面积数据的实例代码。

技术图片

  CSS 选择穷的关键代码已经被加粗显示。

 

CSS 选择器

  CSS 选择器表示选择元素所使用的模式,下面是一些常用的选择器示例。

  选择所有的标签:*

  选择<a> 标签:a

  选择所有 class = ‘link‘ 的元素: .link

  选择 class = ‘link‘ 的 <a> 标签:a.link

  选择 id = ‘home‘ 的 <a> 标签, a#home

  选择父元素为 <a> 标签的所有 <span> 字标签: a > span

  选择 <a> 标签内部的所有 <span> 标签: a span

  选择 title 属性为 ‘home’ 的所有 <a> 标签: a[titile = home]

 

Lxml 已经实现了大部分 CSS3 属性,其不支持的功能可以参见 httpS://pythonhosted.org/cssselect/#supported-selectors

需要注意的是,lxml 在内部实现中,实际上是将 CSS 选择器转换为等价的 XPath 选择器。

 

 

 

 

 

 

  

 

以上是关于Lxml的主要内容,如果未能解决你的问题,请参考以下文章

学习笔记Python - Lxml

python lxml xpath爬取优美图库的妹子图代码

如何从 lxml 树中剥离命名空间?

Python:在 lxml.cssselect 中使用的 CSS 选择器

如何从没有尾巴的lxml中的节点删除标签?

在 Windows 上为 Python 2.7 构建 lxml