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
命名空间与命名空间前缀
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容