lxml是一个功能丰富且简单易用的Python XML、HTML文档解析库
Documentation
概述
lxml
是一个非常Pythonic的文档解析工具包,依赖于C语言库libxml2
和libslt
。它的独特之处在于高效率与功能的完整性兼备,且提供了简单易用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内容