lxml庫
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)
總結:
-
解析html字串:使用
lxml.etree.HTML
進行解析。示例程式碼如下:htmlElement = etree.HTML(text) print(etree.tostring(htmlElement,encoding='utf-8').decode("utf-8"))
-
解析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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 淺析Beautiful Soup庫和Lxml庫XML
- python 3.6 lxml標準庫lxml的安裝及找不到etree問題PythonXML
- lxml庫和貼吧圖片下載案例XML
- lxml官方入門教程(The lxml.etree Tutorial)翻譯XML
- pycharm安裝第三方庫lxml時失敗PyCharmXML
- Python爬蟲——Xpath和lxmlPython爬蟲XML
- Python爬蟲之路-lxml模組Python爬蟲XML
- lxml.etree 教程1: The Element classXML
- 爬蟲-使用lxml解析html資料爬蟲XMLHTML
- Using lxml.objectify to Parse XML With PythonXMLObjectPython
- Python lxml :從網頁HTML/XML提取資料PythonXML網頁HTML
- lxml處理xml時的字元編碼問題XML字元
- Python 爬蟲網頁解析工具lxml.html(二)Python爬蟲網頁XMLHTML
- Python 爬蟲網頁解析工具lxml.html(一)Python爬蟲網頁XMLHTML
- Python爬蟲教程-22-lxml-etree和xpath配合使用Python爬蟲XML
- python中利用lxml模組解析xml檔案報錯XMLSyntaxError: Opening and ending tag mismatchPythonXMLError
- mysqldump備份單庫、部分庫、全庫、及排除部分庫MySql
- 三庫(開發庫、受控庫、靜態庫)的概念和個人理解
- 倉庫系統(2)-商品庫存/庫位管理
- 大牛教你查庫暴庫
- 資料庫中主庫和從庫的關係資料庫
- Mysql 資料庫主庫,備庫實時同步配置MySql資料庫
- Linux共享庫、靜態庫、動態庫詳解Linux
- Linux 依賴動態庫 / 靜態庫的動態態庫 / 靜態庫Linux
- NPM酷庫:bluebird Promise工具庫NPMPromise
- iOS 靜態庫 與私有庫iOS
- 資料庫分庫分表資料庫
- 手工建庫與dbca建庫
- oracle靜默建庫刪庫Oracle
- 靜態庫與動態庫
- Linux下的共享庫(動態庫)和靜態庫Linux
- Python開發環境詳細配置Anaconda+請求庫+解析庫+資料庫+儲存庫+web庫+爬蟲框架+部署庫---Windows篇Python開發環境資料庫Web爬蟲框架Windows
- 從 1 到完美,寫一個 js 庫、node 庫、前端元件庫JS前端元件
- Oracle ADG 備庫新增備庫Oracle
- 物理備庫互轉快照備庫
- Git 本地倉庫和裸倉庫Git
- ios靜態庫和動態庫iOS
- 【資料庫】mysql資料庫索引資料庫MySql索引