lxml庫

pswyjz發表於2021-09-09

lxml 是 一個HTML/XML的解析器,主要的功能是如何解析和提取 HTML/XML 資料。

lxml和正則一樣,也是用 C 實現的,是一款高效能的 Python HTML/XML 解析器,我們可以利用之前學習的XPath語法,來快速的定位特定元素以及節點資訊。

lxml python 官方文件:

需要安裝C語言庫,可使用 pip 安裝:pip install lxml

基本使用:

我們可以利用他來解析HTML程式碼,並且在解析HTML程式碼的時候,如果HTML程式碼不規範,他會自動的進行補全。示例程式碼如下:

# 使用 lxml 的 etree 庫
from lxml import etree 

text = '''<div>
    <ul>
         <li class="item-0"><a href="link1.html">first item</a></li>
         <li class="item-1"><a href="link2.html">second item</a></li>
         <li class="item-inactive"><a href="link3.html">third item</a></li>
         <li class="item-1"><a href="link4.html">fourth item</a></li>
         <li class="item-0"><a href="link5.html">fifth item</a> # 注意,此處缺少一個 </li> 閉合標籤     </ul>
 </div>'''

#利用etree.HTML,將字串解析為HTML文件
html = etree.HTML(text) 

# 按字串序列化HTML文件
result = etree.tostring(html) 

print(result)

輸入結果如下:

<html><body><div>
    <ul>
         <li class="item-0"><a href="link1.html">first item</a></li>
         <li class="item-1"><a href="link2.html">second item</a></li>
         <li class="item-inactive"><a href="link3.html">third item</a></li>
         <li class="item-1"><a href="link4.html">fourth item</a></li>
         <li class="item-0"><a href="link5.html">fifth item</a></li></ul>
 </div></body></html>

可以看到。lxml會自動修改HTML程式碼。例子中不僅補全了li標籤,還新增了body,html標籤。

從檔案中讀取html程式碼:

除了直接使用字串進行解析,lxml還支援從檔案中讀取內容。我們新建一個hello.html檔案:

<!-- hello.html --><div>
    <ul>
         <li class="item-0"><a href="link1.html">first item</a></li>
         <li class="item-1"><a href="link2.html">second item</a></li>
         <li class="item-inactive"><a href="link3.html"><span class="bold">third item</span></a></li>
         <li class="item-1"><a href="link4.html">fourth item</a></li>
         <li class="item-0"><a href="link5.html">fifth item</a></li>
     </ul>
 </div>

然後利用etree.parse()方法來讀取檔案。示例程式碼如下:

from lxml import etree# 讀取外部檔案 hello.htmlhtml = etree.parse('hello.html')
result = etree.tostring(html, pretty_print=True)

print(result)

總結:

  1. 解析html字串:使用lxml.etree.HTML進行解析。示例程式碼如下:

    htmlElement = etree.HTML(text)
    print(etree.tostring(htmlElement,encoding='utf-8').decode("utf-8"))
  2. 解析html檔案:使用lxml.etree.parse進行解析。示例程式碼如下:

    htmlElement = etree.parse("tencent.html")
    print(etree.tostring(htmlElement, encoding='utf-8').decode('utf-8'))

    這個函式預設使用的是XML解析器,所以如果碰到一些不規範的HTML程式碼的時候就會解析錯誤,這時候就要自己建立HTML解析器。

    parser = etree.HTMLParser(encoding='utf-8')
    htmlElement = etree.parse("lagou.html",parser=parser)
    print(etree.tostring(htmlElement, encoding='utf-8').decode('utf-8'))



作者:程式設計小王子AAA
連結:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/755/viewspace-2816743/,如需轉載,請註明出處,否則將追究法律責任。

相關文章