使用 Python 解析和轉換 HTML 文件到 XML 格式


介紹

將 HTML 檔案解析並轉換為 XML 格式是 Web 開發和資料處理領域經常出現的常規活動。與 XML(一種靈活的標記語言,使資料共享和儲存更容易)相比,HTML(超文字標記語言)是用於構建和呈現 Web 上資訊的行業標準語言。資料提取、資料轉換和系統相容性只是將 HTML 轉換為 XML 可能有利的幾個用途。

解析和轉換 HTML 到 XML 的重要性

使用 Python 解析和轉換 HTML 到 XML 至關重要的原因有很多:

  • 資料提取:HTML 文件通常包含嵌入在標記中的有價值資料。透過將 HTML 轉換為 XML,我們可以使用 XML 解析技術更有效地提取特定資料元素和屬性。

  • 資料轉換:XML 提供了靈活的擴充套件結構,可以更好地進行資料轉換和操作。透過將 HTML 轉換為 XML,我們可以執行各種資料轉換操作以獲得所需的資料格式或結構,例如過濾、重新排序和合並。

  • XML 通常用作不同系統和平臺之間資料交換的標準。

  • 資料驗證和校驗:為了驗證資料的完整性和對預定標準的遵守情況,可以針對 XML 模式或文件型別定義 (DTD) 來測試 XML 文件。透過將 HTML 轉換為 XML,我們可以根據預設標準檢查資料,從而確保資料的準確性和一致性。

  • 面向未來:HTML 會隨著時間的推移而發生變化和更新,而 XML 提供了更穩定和標準化的格式。將 HTML 轉換為 XML 使我們能夠透過將其轉換為更能抵抗 HTML 版本更改和不斷發展的 Web 標準的格式來保護我們的資料。

使用 Python 解析 HTML

HTML 解析基礎

HTML 解析需要檢查 HTML 文件的結構,以便提取必要的文字、屬性和資料元件。Python 中的內建庫(如 html.parser 和 xml.etree.ElementTree)提供了基本的 HTML 解析功能。這些庫使我們能夠在 HTML 文件的元件之間導航,檢索它們的屬性,並根據預定標準執行操作。但是,它們可能無法提供諸如自動標籤平衡或錯誤處理之類的先進功能,並且它們處理複雜 HTML 結構的能力可能有限。

使用 BeautifulSoup 解析 HTML

流行的 Python 第三方包 BeautifulSoup 簡化了 HTML 導航和處理。它提供了一個實用且簡單的 API,可以使用不同的搜尋和過濾技術查詢 HTML 元件。BeautifulSoup 支援多種解析器,包括 html.parser、lxml 和 html5lib,使使用者可以自由選擇最適合任何特定情況的解析器。由於其強大的功能(包括自動標籤平衡和錯誤處理),它是解析各種複雜程度的 HTML 文字的絕佳選擇。

透過執行 pip install beautifulsoup4,我們可以安裝庫並開始解析 HTML。安裝後,我們匯入 BeautifulSoup 模組並使用它將 HTML 文字轉換為 BeautifulSoup 物件。然後,使用 BeautifulSoup 的方法和屬性,我們可以透過訪問元素、屬性或文字遍歷和提取資料。

使用 lxml 解析 HTML

lxml 是另一個高效且強大的 Python 包,用於處理 HTML 和 XML 文件。它結合了 libxml2 和 libxslt 庫的優點,提供了一種快速且功能豐富的解析方法。LXML 提供了一整套工具,用於瀏覽、修改和從結構化文件中提取資料,並支援 HTML 和 XML 處理。

將 HTML 轉換為 XML

建立 XML 結構

在將 HTML 轉換為 XML 之前,瞭解 XML 的基本結構和語法至關重要。XML 由包含在標籤內的元件組成,這些元件可能具有屬性幷包含巢狀元件。每個 XML 檔案都有一個根元素,它充當所有其他元素的容器。

為了將 HTML 轉換為 XML,我們必須將 HTML 元素對映到 XML 元素,同時確保結構和內容得到正確反映。為了生成 XML 元素、設定屬性和構建 XML 樹結構,我們可以使用 Python 的 XML 庫,例如 xml.etree.ElementTree 或 lxml.etree。

使用 BeautifulSoup 將 HTML 轉換為 XML

使用 BeautifulSoup,我們可以利用其 HTML 解析功能,然後從解析的 HTML 文件生成 XML 結構。我們遍歷表示 HTML 的 BeautifulSoup 物件,使用 BeautifulSoup.new_tag() 方法建立 XML 元素,分配屬性,並根據所需的 XML 結構組織元素。最後,我們可以使用 prettify() 方法獲得格式良好的 XML 輸出。

使用 lxml 將 HTML 轉換為 XML

使用 lxml,轉換過程類似於 BeautifulSoup。我們使用 lxml.html 解析 HTML 文件,然後使用 lxml.etree.ElementTree 建立 XML 樹結構。我們迭代解析的 HTML 元素,建立相應的 XML 元素,設定屬性並構建 XML 樹。最後,我們可以使用 lxml.etree.tostring() 方法將 XML 樹序列化為字串表示形式。

處理複雜的 HTML 結構

處理巢狀元素

當 HTML 標籤相互巢狀形成分層結構時,就會出現巢狀元素。為了在解析和轉換過程中處理巢狀元素,我們需要遞迴遍歷 HTML 文件並建立相應的巢狀 XML 元素。透過正確對映 HTML 標籤和 XML 元素之間的關係,我們在轉換過程中保持結構的完整性。

處理屬性

HTML 標籤通常具有提供附加資訊或屬性的屬性。將 HTML 轉換為 XML 時,我們需要將這些屬性轉移到 XML 元素。像 BeautifulSoup 和 lxml 這樣的 Python 庫提供了訪問和從 HTML 元素中提取屬性的方法。透過將這些屬性分配給 XML 元素,我們在轉換過程中保留了相關元資料。

解決 HTML 中的不規則性

HTML 文件可能包含不規則性,例如未關閉的標籤、缺少的屬性或格式錯誤的結構。這些不規則性在解析和轉換過程中可能帶來挑戰。像 BeautifulSoup 和 lxml 這樣的 Python 庫透過採用寬鬆的解析技術來處理此類不規則性。它們會自動平衡標籤、糾正缺少的屬性並規範化結構,以確保有效的 XML 輸出。

示例

from bs4 import BeautifulSoup import 
requests 
 
# Function to parse HTML and convert it to XML 
def html_to_xml(html_content):     
   # Parse HTML using BeautifulSoup     
   soup = BeautifulSoup(html_content, 'html.parser') 
     

   # Create an XML root element     
   root = soup.new_tag('root') 
     
    # Recursively convert HTML elements to XML elements     
    def convert(element, parent): 
       xml_element = soup.new_tag(element.name) 
         
       # Convert attributes to XML attributes         
       for attr, value in element.attrs.items(): 
          xml_element[attr] = value 
         
       # Convert nested elements         
       for child in element.children:             
           if child.name: 
              convert(child, xml_element)          
           else: 
              xml_element.string = str(child) 
         
        parent.append(xml_element) 
     
   # Convert top-level HTML elements     
   for element in soup.children:         
      if element.name: 
         convert(element, root) 
     
    # Create an XML document     
    xml_document = soup.new_tag('xml')     
    xml_document.append(root) 
     
    return xml_document.prettify() 
 
 
# Example usage
 
url = "https://example.com"  # Replace with your desired URL 
response = requests.get(url) 
html_content = response.content 
 
xml_output = html_to_xml(html_content) 
print(xml_output) 

輸出

<xml> 
 <root> 
  <html> 
  </html> 
 </root> 
</xml> 
</pre>

結論

透過閱讀本文,讀者將全面掌握解析 HTML 頁面、將其轉換為 XML 格式以及使用 Python 庫的功能來處理各種情況和挑戰。有了這種理解,開發人員將能夠有效地處理 HTML 內容、提取有用的資料並確保與基於 XML 的系統的相容性。因此,讓我們探索基於 Python 的 HTML 解析和 XML 轉換的精彩世界吧!

更新於:2023年7月25日

849 次檢視

啟動您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.