爬蟲中如何創建Beautiful Soup 類的對象

????????在使用 lxml 庫解析網頁數據時,每次都需要編寫和測試 XPath 的路徑表達式,顯得非常
煩瑣。為了解決這個問題, Python 還提供了 Beautiful Soup 庫提取 HTML 文檔或 XML 文檔的
節點。 Beautiful Soup 使用起來很便捷,受到了開發人員的推崇。接下來,本節先帶領大家認
Beautiful Soup ,再為大家介紹如何使用 Beautiful Soup 解析網頁數據。

一、Beautiful Soup 簡介

????????Beautiful Soup 是一個用于從 HTML 文檔或 XML 文檔中提取目標數據的 Python 庫。它歷
經了眾多版本,其中 Beautiful Soup 3 已經停止開發與維護,官方推薦使用 Beautiful Soup 4 (簡
bs4 )進行程序開發。截至本書完稿時, Beautiful Soup 的最新版本是 4.4.0
????????為了快速解析 HTML 文檔或 XML 文檔的數據, bs4 不僅提供了多種類型的解析器,還支
CSS 選擇器。 bs4 通過解析器可以將 HTML XML 文檔、片段轉換成節點樹,節點樹中
的每個節點對應一個 Python 類的對象。 bs4 庫或 bs4.element 模塊中提供了 Tag 類、
NavigableString 類、 BeautifulSoup 類、 Comment 類等 4 個比較重要的類。關于這 4 個類的具
體介紹如下。
  • ?bs4.element.Tag 類:表示 HTML XML 中的元素,是最基本的信息組織單元。它有 兩個非常重要的屬性:表示元素名稱的 name 和表示元素屬性的 attrs
  • ?bs4.element.NavigableString 類:表示 HTML XML 元素中的文本(非屬性字符串)。
  • ?bs4.BeautifulSoup 類:表示 HTML XML 節點樹中的全部內容,支持遍歷節點樹和 搜索節點樹的大部分方法。
  • ?bs4.element.Comment類:表示元素內字符串的注釋部分,是一種特殊的NavigableString 類的對象。
????????bs4 的用法非常簡單,一般分為如下 3 個步驟。
1 )根據 HTML XML 文檔、片段創建 BeautifulSoup 類的對象。
2 )通過 BeautifulSoup 類的對象的查找方法或 CSS 選擇器定位節點。
3 )通過訪問節點的屬性或節點的名稱提取文本。

二、創建 BeautifulSoup 類的對象

????????要想使用 bs4 解析網頁數據,需要先使用構造方法創建 BeautifulSoup 類的對象。
BeautifulSoup 類的構造方法的聲明如下。
BeautifulSoup(markup="", features=None, builder=None, parse_only=None, from_encoding=None, exclude_encodings=None, element_classes=None, **kwargs)
????????上述方法中常用參數的含義如下。
  • ?markup:必選參數,表示待解析的內容,可以取值為字符串或類似文件的對象。
  • features:可選參數,表示指定的解析器。該參數可以接收解析器名稱或標記類型。其 中,解析器名稱包括 lxmllxml-xmlhtml.parser html5lib,標記類型包括 htmlhtml5 xml
  • parse_only:可選參數,指定只解析部分文檔。該參數需要接收一個 SoupStrainer 類的 對象。當文檔太大而無法全部放入內存時,便可以考慮只解析一部分文檔。
  • from_encoding:可選參數,指定待解析文檔的編碼格式。 值得一提的是,如果我們只需要解析 HTML 文檔,那么在創建 BeautifulSoup 類的對象時 可以不用指定解析器。此時 Beautiful Soup 會根據當前系統安裝的庫自動選擇解析器。解析器 的選擇順序為 lxmlhtml5libPython 標準庫,但在以下兩種情況下會發生變化。
  • 要解析的文檔是什么類型?目前支持 htmlxml html5
  • 指定使用哪種解析器?目前支持 lxmlhtml5lib html.parser
????????如果指定的解析器沒有安裝,那么 Beautiful Soup 會自動選擇其他方案。不過,目前只有
解析器 lxml 支持 XML 文檔的解析。在當前系統中沒有安裝解析器 lxml 的情況下,即使創建
BeautifulSoup 對象時明確指定使用解析器 lxml ,也無法得到解析后的內容。
下面通過一張表來區分上述 4 種解析器的優勢與劣勢,具體如表 4-7 所示。

?????????接下來,通過一個例子來演示如何創建 BeautifulSoup 類的對象,具體代碼如下。

1 from bs4 import BeautifulSoup 
2 html_doc = """<html><head><title>The Dormouse's story</title></head> 
3 <body> 
4 <p class="title"><b>The Dormouse's story</b></p> 
5 <p class="story">Once upon a time there were three little sisters; 
6 and their names were 
7 <a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>, 
8 <a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and 
9 <a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>; 
10 and they lived at the bottom of a well.</p> 
11 <p class="story">...</p> 
12 """ 
13 # 根據 html_doc 創建 BeautifulSoup 類的對象,并指定使用 lxml 解析器解析文檔
14 soup = BeautifulSoup(html_doc, features='lxml') 
15 print(soup.prettify())
????????在上述示例代碼中,第 1 行代碼導入了 BeautifulSoup 類,第 2 12 行定義了變量 html_doc
保存 HTML 代碼片段,第 14 行代碼根據 html_doc 創建了一個 BeautifulSoup 類的對象,并指
定使用解析器 lxml 來解析 HTML 文檔,第 15 行代碼輸出了 soup.prettify() 執行的結果,其中
prettify() 方法會對 HTML 代碼片段進行格式化處理,友好地顯示 HTML 代碼。
運行代碼,輸出如下結果。
<html> <head> <title> The Dormouse's story </title> </head> <body> <p class="title"> <b> The Dormouse's story </b> </p> ……</body> 
</html>

?

?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/37042.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/37042.shtml
英文地址,請注明出處:http://en.pswp.cn/web/37042.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

計算機中的浮點數 - 為什么十進制的 0.1 在計算機中是一個無限循環小數

計算機中的浮點數 - 為什么十進制的 0.1 在計算機中是一個無限循環小數 flyfish 用 float 或 double 來存儲小數時不是精確值 浮點數在計算機中是以二進制形式存儲的&#xff0c;通常使用 IEEE 754 標準。浮點數由三個部分組成&#xff1a;符號位、指數位和尾數位。 先看一個…

【2024】LeetCode HOT 100——圖論

目錄 1. 島嶼數量1.1 C++實現1.2 Python實現1.3 時空分析2. 腐爛的橘子2.1 C++實現2.2 Python實現2.3 時空分析3. 課程表3.1 C++實現3.2 Python實現3.3 時空分析4. 實現 Trie (前綴樹)4.1 C++實現4.2 Python實現4.3 時空分析1. 島嶼數量 ?? 原題鏈接:200. 島嶼數量 經典的Fl…

鴻蒙應用開發之OpenGL的EGL

要開發OpenGL程序,那么這個程序就需要與操作系統進行交流,由于存在不同的操作系統,這樣就面臨著開發不同的程序的困難,為了解決這個問題,就引入了一個中間層的軟件庫,這個軟件庫叫做EGL。 眾所周知,Opengl是跨平臺的,那么面對各種平臺的差異性,Opengl是如何抹平而做到…

CleanMyMacX2024讓你的蘋果電腦重獲生機!

在電腦使用過程中&#xff0c;你是否遇到過這樣的問題&#xff1a;運行速度變慢、磁盤空間不足、系統出現故障……這些問題不僅影響你的工作效率&#xff0c;還會讓電腦的使用壽命大大縮短。那么&#xff0c;如何輕松解決這些問題呢&#xff1f;答案就是CleanMyMac X。 CleanM…

蘇州大廠面試題JAVA 面試集

基礎知識1、強引用、軟引用、弱引用、幻象引用有什么區別?(java基礎) 答案參考:https://time.geekbang.org/column/article/6970 2、 對比Hashtable、HashMap、TreeMap有什么不同?(數據結構) 答案參考:https://time.geekbang.org/column/article/8053 3、一個線程調用兩次…

ubuntu20.04安裝kazam桌面屏幕錄制工具

在Ubuntu 20.04上安裝Kazam可以通過以下步驟進行&#xff1a; 1.打開終端&#xff1a;可以通過按下Ctrl Alt T組合鍵來打開終端。 2.添加PPA源&#xff1a;Kazam不再在官方Ubuntu倉庫中&#xff0c;但可以通過PPA源進行安裝。在終端中輸入以下命令來添加PPA&#xff1a; su…

AI繪畫:P圖如此絲滑,OpenAI上線ChatGPT圖像編輯功能,DallE-3繪畫如此簡單

大家好我是極客菌&#xff0c;用ChatGPT的DallE-3進行AI繪畫對很多人來說是一個門檻很低的選擇&#xff0c;現在OpenAI又重磅上線了圖像編輯器功能(DallE editor)&#xff0c;可以很方便的對圖片的局部進行修改&#xff0c;而且支持中文&#xff0c;主打一個功能強大且好用&…

Jquery 獲得Form下的所有text、checkbox等表單的值

Jquery使用表單我主要是想獲得某一個表單下的所有text獲得checkbox的值: 可以這樣寫: var parameter{}; $("input[typetext]",document.forms[0]).each(function(){ alert(this.name); }); 獲得所有名為hobby的選中的checkbox的值和form2下的所有text的值 function s…

【云原生】Prometheus 使用詳解

目錄 一、前言 二、服務監控概述 2.1 什么是微服務監控 2.2 微服務監控指標 2.3 微服務監控工具 三、Prometheus概述 3.1 Prometheus是什么 3.2 Prometheus 特點 3.3 Prometheus 架構圖 3.3.1 Prometheus核心組件 3.3.2 Prometheus 工作流程 3.4 Prometheus 應用場景…

Elasticsearch 配置

Elasticsearch提供良好的默認設置&#xff0c;并且只需要很少的配置。可以使用群集更新設置API在正在運行的群集上更改大多數設置。 配置文件應包含特定于節點的設置&#xff08;如node.name和paths&#xff09;&#xff0c;或節點為了能夠加入集群而需要的設置&#xff0c;如…

webrtc-m120編譯 (m126)

WebRTC實時互動入門 環境 lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.04.4 LTS Release: 22.04 Codename: jammyuname -a Linux yqw-Lenovo-XiaoXinPro-13ARE-2020

Agent技術在現代軟件開發與應用中的探索

一、引言 隨著計算機科學的快速發展&#xff0c;Agent技術作為人工智能和分布式計算領域的重要分支&#xff0c;已經滲透到軟件開發的各個方面。Agent技術通過賦予軟件實體自主性和交互性&#xff0c;使得軟件系統能夠更加智能、靈活地響應環境變化和用戶需求。本文將對Agent技…

java基于ssm+jsp 個人交友網站

1前臺首頁功能模塊 個人交友網站&#xff0c;在系統首頁可以查看首頁、交友信息、線下活動、系統公告、論壇信息、我的、跳轉到后臺、客服等內容&#xff0c;如圖1所示。 圖1系統功能界面圖 用戶注冊&#xff0c;在用戶注冊頁面可以填寫用戶賬號、密碼、用戶姓名、年齡等信息進…

深入理解 Spring MVC:原理與架構解析

文章目錄 前言一、MVC二、Spring MVC三、Spring MVC 工作流程四、小結推薦閱讀 前言 Spring MVC 是一種基于 Java 的 Web 應用開發框架&#xff0c;它通過模型-視圖-控制器&#xff08;Model-View-Controller, MVC&#xff09;的設計模式來組織和管理 Web 應用程序。本文將深入…

java基于ssm+jsp 二手車交易網站

1用戶功能模塊 定金支付管理&#xff0c;在定金支付管理頁面可以填寫訂單編號、車型、品牌、分類、車身顏色、售價、訂金金額、付款日期、備注、用戶名、姓名、聯系方式、是否支付等信息&#xff0c;進行詳情、修改&#xff0c;如圖1所示。 圖1定金支付管理界面圖 預約到店管…

1.搭建篇——帝可得后臺管理系統

目錄 前言項目搭建一、搭建后端項目1.初始化項目Maven構建 2.MySQL相關導入sql配置信息 3. Redis相關啟動配置信息 4.項目運行 二、 搭建前端項目1.初始化項目2.安裝依賴3.項目運行 三、問題 前言 提示&#xff1a;本篇講解 帝可得后臺管理系統 項目搭建 項目搭建 一、搭建后…

單段時間最優S型速度規劃算法

一&#xff0c;背景 在做機械臂軌跡規劃的單段路徑的速度規劃時&#xff0c;除了參考《Trajectory Planning for Automatic Machines and Robots》等文獻之外&#xff0c;還在知乎找到了這位大佬 韓冰 寫的在線規劃方法&#xff1a; https://zhuanlan.zhihu.com/p/585253101/e…

單片機的學習(15)--LCD1602

LCD1602 14.1LCD1602的基礎知識1.LCD1602介紹2.引腳及應用電路3.內部結構框圖4.時序結構5.LCD1602指令集6.字符值7.LCD1602操作流程 14.2LCD1602功能函數代碼1.顯示一個字符&#xff08;1&#xff09;工程目錄&#xff08;2&#xff09;main.c函數&#xff08;3&#xff09;LCD…

oj E : 投資項目的方案

Description 有n種基礎的投資項目&#xff0c;每一種的單位收益率為profitn&#xff0c;存在m種投資組合&#xff0c;限制每一種的投資總額不能超過invest_summ 每種投資組合中項目所需的單位投入是不同的&#xff0c;為costmn 求&#xff1a;使得收益率之和最高的每種項目投…

基于機器學習的制冷系統過充電和欠充電故障診斷(采用紅外熱圖像數據,MATLAB)

到目前為止&#xff0c;制冷系統故障診斷方法已經產生很多種&#xff0c;概括起來主要有三大類&#xff1a;基于分析的方法&#xff0c;基于知識的方法和基于數據驅動的方法。基于分析的方法主要獲得制冷系統的數學模型&#xff0c;通過殘差來檢測和診斷故障。如果存在殘差且很…