官术网_书友最值得收藏!

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')。執行后會輸出:

主站蜘蛛池模板: 开原市| 余江县| 磴口县| 商水县| 常德市| 廉江市| 商丘市| 汝州市| 天长市| 新建县| 奉贤区| 和顺县| 南开区| 镇巴县| 巴塘县| 徐汇区| 同心县| 望谟县| 安泽县| 盐源县| 赣州市| 衡南县| 含山县| 阳朔县| 察哈| 宁乡县| 绥芬河市| 乃东县| 鄂伦春自治旗| 博爱县| 武定县| 长治县| 衡阳市| 菏泽市| 安岳县| 新营市| 姜堰市| 忻州市| 右玉县| 金坛市| 海淀区|