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 选择器。

 

 

 

 

 

 

  

 

posted on 2019-05-16 10:41  海纳百川_有容乃大  阅读(262)  评论(0编辑  收藏  举报

导航