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
命名空間與命名空間前綴
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容