- Python數據分析從入門到精通
- 李梓萌編著
- 1910字
- 2020-09-18 18:05:46
2.1 處理HTML和XML數據

因為HTML和XML是互聯網應用中的最常用網頁標記語言,是開發網頁程序的核心技術,所以用Python處理HTML和XML頁面至關重要。在本節的內容中,將詳細講解使用Python語言處理HTML和XML數據的知識。
2.1.1 解析XML數據
XML是可擴展標記語言(Extensible Markup Language)的縮寫,是標準通用標記語言的子集。在Python應用程序中,有兩種常見的XML編程接口,分別是SAX和DOM。因此Python語言有對應的兩種解析XML文件的方法:SAX和DOM。
在Python語言中,使用庫xml實現XML的處理功能,庫xml由如下核心模塊構成。
● xml.etree.ElementTree:提供處理ElementTree的成員,是一個輕量級的XML處理器。
● xml.dom:用于定義DOM的API,提供了處理DOM標記的成員。
● xml.dom.minidom:提供了處理最小DOM的成員。
● xml.dom.pulldom:提供了構建部分DOM樹的成員。
● xml.sax:提供了處理SAX2的基類和方法成員。
● xml.parsers.expat:綁定Expat解析器功能,能夠使用注冊處理器處理不同XML文檔部分。
如下面的實例代碼,演示了使用庫xml.etree.ElementTree讀取XML文件的過程。其中XML文件test.xml的具體實現代碼如下所示。
源碼路徑:daima\2\2-1\test.xml

文件ElementTreeuse.py的功能是獲取上述XML文件節中的點元素,具體實現代碼如下所示。
源碼路徑:daima\2\2-1\ElementTreeuse.py


執行后會輸出:

在下面的實例代碼中,演示了使用SAX方法解析XML文件的過程。其中實例文件movies.xml是一個基本的XML文件,在里面保存一些與電影有關的資料信息。文件movies.xml的具體實現代碼如下所示。
源碼路徑:daima\2\2-1\movies.xml


實例文件sax.py的功能是解析文件movies.xml的內容,具體實現代碼如下所示。
源碼路徑:daima\2\2-1\sax.py


執行后的效果如圖2-1所示。

圖2-1 執行效果
在下面的實例文件dom.py中,演示了使用DOM方法解析XML文件的過程。實例文件dom.py的功能是解析文件movies.xml的內容,具體實現代碼如下所示。
源碼路徑:daima\2\2-1\dom.py


執行后會輸出:

在下面的實例代碼中,演示了使用DOM獲取XML文件中指定元素值的過程。其中XML文件user.xml的代碼如下所示。
源碼路徑:daima\2\2-1\user.xml

實例文件domuse.py的功能是解析文件movies.xml的內容,具體實現代碼如下所示。
源碼路徑:daima\2\2-1\domuse.py


執行后會輸出:

2.1.2 使用庫beautiful soup解析數據
beautiful soup是一個重要的Python庫,其功能是將HTML和XML文件的標簽文件解析成樹形結構,然后提取HTML或XML文件中指定標簽屬性對應的數據。庫beautiful soup經常被用在爬蟲項目中,通過使用此庫可以大大提高開發效率。
beautiful soup 3目前已經停止維護,其官方推薦使用beautiful soup4,本書講解的是beautiful soup4。開發者可以使用如下兩種命令安裝庫beautiful soup4。

安裝beautiful soup4后還需要安裝文件解析器,beautiful soup4不但支持Python標準庫中的HTML解析器,而且還支持第三方的解析器(如lxml)。根據開發者所用操作系統的不同,可以使用如下命令來安裝lxml。

在下面的實例文件bs01.py中,演示了使用庫beautiful soup4解析HTML代碼的過程。
源碼路徑:daima\2\2-1\bs01.py

通過上述代碼,解析了html_doc中的HTML代碼,執行后輸出解析結果:

在下面的實例文件bs02.py中,演示了使用庫beautiful soup解析指定HTML標簽的過程。
源碼路徑:daima\2\2-1\bs02.py


執行后將輸出指定標簽的信息:

2.1.3 使用庫bleach解析數據
在使用Python開發Web程序時,開發者面臨一個十分重要的安全性問題:跨站腳本注入攻擊(黑客利用網站漏洞從用戶一端盜取重要信息)。為了解決跨站腳本注入攻擊漏洞,最常用的做法是設置一個訪問白名單,設置只顯示指定的HTML標簽和屬性。在現實應用中,最常用的HTML過濾庫是bleach,能夠實現基于白名單的HTML清理和文本鏈接模塊。
我們可以使用如下兩種命令安裝庫bleach。

在下面的實例文件guolv.py中,演示使用方法bleach.clean()過濾處理HTML標簽的過程。
源碼路徑:daima\2\2-1\guolv.py


執行后會輸出:

2.1.4 使用庫cssutils解析數據
在Python程序中可使用庫cssutils解析和構建CSS級聯樣式表。在庫cssutils中只有DOM解析模塊,沒有任何渲染功能。可以使用如下兩種命令安裝庫cssutils。


在下面的實例文件css01.py中,演示了使用庫cssutils處理CSS標記的過程。
源碼路徑:daima\2\2-1\css01.py

執行后會輸出:

2.1.5 使用庫html5lib解析數據
在Python程序中,可以使用庫html5lib解析HTML文件。庫html5lib是用純Python語言編寫實現的,其解析方式與瀏覽器相同。在2.1.2講解的庫beautiful soup使用Lxml解析器,而庫Html5lib是beautifulsoup支持的另一種解析器。
我們可以使用如下兩種命令安裝庫html5lib:

在下面的實例文件ht501.py中,演示了使用html5lib解析HTML文件的過程。
源碼路徑:daima\2\2-1\ht501.py

執行后會輸出:

2.1.6 使用庫markupsafe解析數據
在Python程序中,使用庫markupsafe可以將具有特殊含義的字符替換掉,以減輕注入攻擊(把用戶輸入、提交的數據當作代碼來執行),將不受信任用戶的輸入信息安全地顯示在頁面上。
可以使用如下兩種命令安裝庫markupsafe。

在下面的實例文件mark01.py中,演示了使用庫markupsafe構建安全HTML的過程。
源碼路徑:daima\2\2-1\mark01.py

執行后會輸出:

2.1.7 使用庫pyquery解析數據
在Python程序中,可以使用庫pyquery解析HTML文件的內容。pyquery是JS框架jquery的Python版,是用Python語言仿照jquery源碼實現的,其語法與jquery幾乎完全相同。
可以使用如下兩種命令安裝庫pyquery。

在下面的實例文件pyq01.py中,演示了使用庫pyquery實現字符串初始化的過程。
源碼路徑:daima\2\2-1\pyq01.py


在上述代碼中,由于pyquery的編寫比較麻煩,所以在導入時添加了別名pq:

上述代碼中的doc是一個pyquery對象,可以通過doc進行元素的選擇,這里就是一個CSS選擇器,所以CSS選擇器的規則都可以用,直接通過doc(標簽名)獲取該標簽所有的的內容。若想要獲取class,則doc('.class_name'),如果是id,則doc('#id_name')。執行后會輸出:
