淺析Beautiful Soup庫和Lxml庫
眾所周知,Beautiful Sou和Lxml是兩個非常流行的python模組,他們常被用來對抓取到的網頁進行解析,以便進一步抓取的進行。作為一個爬蟲愛好者,今天我來簡單講講這兩個庫各自的優點和不足,不對的地方還請各位大神斧正。
Beautiful Soup模組可以用來解析網頁,並提供定位內容的便捷介面,可以用下面的命令安裝其最新版本。
>>>pip install beautifulsoup4
使用bs4庫的第一步是將以下載的HTML內容解析為soup文件,例如以下為一個簡單的HTML檔案,存在屬性值兩側引號缺失和標籤未閉合的問題。
<ul class=wgxshr>
<li>height
<li>weight
</ul>
使用bs4庫進行處理
>>>from bs4 import BeautifulSoup
>>>broken_html = '<ul class=wgxshr><li>height<li>weight</ul>'
>>>soup = BeautifulSoup(broken_html, 'html.parser')
>>>fixed_html = soup.prettify()
>>>print fixed_html
<html>
<body>
<ul class="wgxshr">
<li>height</li>
<li>weight</li>
</ul>
</body>
</html>
從上面的執行結果可以看出來,BeautifulSoup 能夠正確的解析缺失的引號並閉合標籤,此外還新增了<html>和<body>標籤使其成為完整的HTML文件,然後可以使用find()和find_all()方法定位我們需要的元素。
但是,需要注意的是,由於這裡使用的是python內建庫,由於不同的版本容錯能力不同,這裡解析出來的HTML檔案可能是錯誤的,即weight列表項被解析為height列表項的子元素,而這種錯誤在實踐中很難被發現。另外,由於bs4是python的原生庫,相比lxml的libxml2+libxslt的原生C程式碼慢很多。
lxml是另一個python爬蟲的常用庫,它是基於libxml2這一XML解析庫的python封裝,速度比BeautifulSoup快。使用lxml的第一步也是將有可能不合法的HTML解析為同一格式。例如:
>>>import lxml.html
>>>broken_html = '<ul class=wgxshr><li>height><li><weight></ul>'
>>>tree = lxml.html.fromstring(broken_html)
>>>fixed_html = lxml.html.tostring(tree, pretty_print=True)
>>>print fixed_html
<ul class="wgxshr">
<li>height</li>
<li>weight</li>
</ul>
同樣的,lxml也可以正確解析屬性兩側缺失的引號,並閉合標籤,但是沒有像BeautifulSoup庫那樣新增額外的<html>和<body>標籤。lxml提供了幾種不同的不同的用來選擇元素的方法,如xpath選擇器,css選擇器等。
相較於BeautifulSoup庫,lxml更快且更健壯,一般來所,是抓取資料的最佳選擇。
但bs4已經可以依賴於lxml,速度有了大幅度提升,健壯性也大大提高,可以直接 soup = BeautifulSoup(html, 'lxml')了。
所以,編寫爬蟲程式時,究竟是使用正規表示式,,Beautiful Soup還是Lxml,就仁者見仁,智者見智了。
相關文章
- Beautiful Soup庫的使用(學習筆記)筆記
- Beautiful Soup學習
- lxml庫XML
- Beautiful Soup 學習手冊
- Python Beautiful Soup簡介Python
- JB的Python之旅-爬蟲篇--urllib和Beautiful SoupPython爬蟲
- 使用 Beautiful Soup 在 Python 中抓取網頁Python網頁
- Python Beautiful Soup+requests實現爬蟲Python爬蟲
- Python網頁抓取工具Beautiful Soup面面觀!Python網頁
- Android NDK祕籍--淺析靜態庫和動態庫Android
- lxml庫和貼吧圖片下載案例XML
- Beautiful Soup在爬蟲中的基本使用語法爬蟲
- Python爬蟲學習(11):Beautiful Soup的使用Python爬蟲
- 【Python3網路爬蟲開發實戰】4-解析庫的使用-2 使用Beautiful SoupPython爬蟲
- 淺析NewSQL資料庫——TiDBSQL資料庫TiDB
- 資料庫連線池淺析資料庫
- 資料庫安全漏洞淺析資料庫
- xpath beautiful pyquery三種解析庫
- python爬蟲之Beautiful Soup基礎知識+例項Python爬蟲
- 一起學爬蟲——使用Beautiful Soup爬取網頁爬蟲網頁
- Oracle資料庫字符集淺析Oracle資料庫
- 資料庫的讀現象淺析資料庫
- 淺析pplx庫的設計與實現。
- 優秀開源庫SDWebImage原始碼淺析Web原始碼
- 淺析列式資料庫的特點NR資料庫
- python 3.6 lxml標準庫lxml的安裝及找不到etree問題PythonXML
- Dart | 淺析dart中庫的匯入與拆分Dart
- 資料庫表分割技術淺析(水平分割/垂直分割/庫表雜湊)資料庫
- 淺析雲資料庫配置錯誤的危險性資料庫
- LLM大模型向量資料庫技術架構淺析大模型資料庫架構
- [zt] 淺析資料庫的FOR XML的應用—RAW模式資料庫XML模式
- 淺析jQuery原理並仿寫封裝一個自己的庫jQuery封裝
- pycharm安裝第三方庫lxml時失敗PyCharmXML
- 國產資料庫達夢資料庫(DM7)例項初始化引數淺析資料庫
- 淺析圖資料庫 Nebula Graph 資料匯入工具——Spark Writer資料庫Spark
- 淺談requests庫
- 淺析iOS手遊逆向和保護iOS
- 淺析HDFS架構和設計架構