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官方入門教程(The lxml.etree Tutorial)翻譯XML
- pycharm安裝第三方庫lxml時失敗PyCharmXML
- Python爬蟲——Xpath和lxmlPython爬蟲XML
- Python爬蟲之路-lxml模組Python爬蟲XML
- 爬蟲-使用lxml解析html資料爬蟲XMLHTML
- Python lxml :從網頁HTML/XML提取資料PythonXML網頁HTML
- Python 爬蟲網頁解析工具lxml.html(二)Python爬蟲網頁XMLHTML
- Python 爬蟲網頁解析工具lxml.html(一)Python爬蟲網頁XMLHTML
- Python爬蟲教程-22-lxml-etree和xpath配合使用Python爬蟲XML
- mysqldump備份單庫、部分庫、全庫、及排除部分庫MySql
- Linux共享庫、靜態庫、動態庫詳解Linux
- 倉庫系統(2)-商品庫存/庫位管理
- Python開發環境詳細配置Anaconda+請求庫+解析庫+資料庫+儲存庫+web庫+爬蟲框架+部署庫---Windows篇Python開發環境資料庫Web爬蟲框架Windows
- 靜態庫與動態庫
- Oracle ADG 備庫新增備庫Oracle
- NPM酷庫:bluebird Promise工具庫NPMPromise
- iOS 靜態庫 與私有庫iOS
- 從 1 到完美,寫一個 js 庫、node 庫、前端元件庫JS前端元件
- git倉庫修改遠端倉庫Git
- 製作CocoaPods公有庫和私有庫
- ios靜態庫和動態庫iOS
- 筆記: 判斷lib庫是動態庫還是靜態庫筆記
- 題庫
- 模板庫
- ASIWebPageRequest庫Web
- Faraday庫
- needle庫
- Typhoeus庫
- Fetch庫
- Nokogiri庫
- superagent 庫
- ASIHTTPRequest庫HTTP
- MojoUserAgent庫
- HTTParty庫HTTP
- jsonlite庫JSON
- Anemone庫