lxml - 用Python解析XML和HTML

lxml是一个功能丰富且简单易用的Python XML、HTML文档解析库
Documentation

概述

lxml是一个非常Pythonic的文档解析工具包,依赖于C语言库libxml2libslt。它的独特之处在于高效率与功能的完整性兼备,且提供了简单易用Python原生API。最新版本的lxml支持CPython2.6至3.6的版本。

下载

pip install lxml
# 可以通过pip直接进行下载使用

git clone https://github.com/lxml/lxml.git lxml
# 也可以从git克隆源码进行下载

Module lxml.html&lxml.etree

这是两个最常用的HTML文档和XML文档解析模块。
HTML(HyperText Markup Language) 超文本标记语言
XML(Extensible Markup Language) 可扩展标记语言

Class _Element(顶级基类)

object ---+
          |
         _Element

# =====================================
# Properties(属性)
# =====================================

attrib  # 元素属性字典
base  # 原始文档的url或None
sourceline  # 原始行数或None
tag  # tag名
tail  # 尾巴文本(存在于兄弟节点间,属于父节点的文本内容)
text  # 位于第一个子标签之前的子文本
prefix  # 命名空间前缀(XML)(详解见底部附录)
nsmap  # 命名空间与URL映射关系(XML)(详解见底部附录)


# =====================================
# Instance Methods(实例方法)(常用)
# =====================================

xpath(self, _path, namespaces=None, extensions=None, smart_strings=True, **_variables)
# 通过xpath表达式查找指定节点元素,返回指定节点元素列表或None

getparent(self)
# 查找父节点,返回找到的父节点对象或None

getprevious(self)
# 查找前一个相邻的兄弟节点元素,返回找到的节点对象或None

getnext(self)
# 查找后一个相邻的兄弟节点对象,返回找到的节点对象或None

getchildren(self)
# 返回所有直属的子节点对象

getroottree(self)
# 返回所在文档的根节点树

find(self, path, namespaces=None)
# 根据标签名或路径,返回第一个匹配到的子节点对象

findall(self, path, namespaces=None)
# 根据标签名或路径,返回全部符合要求的子节点对象

findtext(self, path, default=None, namespaces=None)
# 根据标签名或路径,返回第一个匹配到的子节点对象的text文本

clear(self)
# 重置节点对象,清除所有子节点对象,以及所有的text、tail对象

get(self, key, default=None)
# 返回节点属性key对应的值

items(self)
# 以任意顺序返回节点属性键和值

keys(self)
# 以任意顺序返回包含节点全部属性名的列表

values(self)
# 以任意顺序返回包含节点全部属性值的列表

set(self, key, value)
# 设置节点属性

lxml.etree

object ---+
          |
   _Element ---+
               |
              ElementBase

# =====================================
Functions(函数)(常用)
# =====================================

HTML(text, parser=None, base_url=None)
# 将字符型HTML文档内容转换为节点树对象

fromstring(text, parser=None, base_url=None)
# 将字符型XML文档或文档片段转换问节点树对象

tostring(element_or_tree, encoding=None, method="xml", xml_declaration=None, pretty_print=False, with_tail=True, standalone=None, doctype=None, exclusive=False, with_commments=True, inclusive_ns_prefixes=None)
# 将节点树对象序列化为编码的字符型

tounicode(element_or_tree, method="xml", pretty_print=False, with_tail=True, doctype=None)
# 将节点树对象序列化为Unicode型

lxml.html

  object ---+ 
            | 
etree._Element ---+
                  | 
    etree.ElementBase---+ 
                        | 
         object ---+    | 
                   |    |
           HtmlMixin ---+  
                        |
                       HtmlElement


# =====================================
Functions(函数)(常用)
# =====================================

fromstring(html, base_url=None, parser=None, **kwargs)
# 将字符型html文档转换为节点树或文档树

tostring(doc, pretty_print=False, include_meta_content_type=False, encoding=None, method="html", with_tail=True, doctype=None)
# 将节点树或文档树序列化为字符型

######################################
**Class HtmlMixin**

object ---+
          |
          HtmlMixin

# =====================================
Properties(属性)
# =====================================
base_url  # 文档url
head  # <head>标签部分
body  # <body>标签部分
forms  # 返回全部form列表
label  # 元素的label标签
classes  # class属性值的集合

# =====================================
Instance Methods(实例方法)(常用)
# =====================================

drop_tag(self)
# 移除标签,但不移除其子标签和text文本,将其合并到父节点

drop_tree(self)
# 移除节点树(包含子节点和text),但不移除它的tail文本,将其合并到父节点或前一个兄弟节点

find_class(self, class_name)
# 根据class属性值查找节点元素

get_element_by_id(self, rel)
# 根据id属性值查找节点元素

set(self, key, value=None)
# 设置节点元素的属性

text_content(self)
# 返回其后代节点与其自身的全部text内容

附录:

HTML DOM
命名空间与命名空间前缀

推荐阅读更多精彩内容