Python爬蟲(三):BeautifulSoup庫

1. BeautifulSoup是什么?

BeautifulSoup 是一個 Python 庫,專門用來解析 HTML 或 XML 文件,方便我們提取數據。它能把網頁源代碼轉換成樹形結構,讓我們可以輕松查找、修改內容,并自動處理編碼問題(如 Unicode 和 UTF-8)。

支持的解析器

BeautifulSoup 支持多種解析器,不同解析器的速度和容錯能力不同:

解析器使用方法優點缺點
Python標準庫BeautifulSoup(html, "html.parser")內置,無需安裝速度較慢
lxml (HTML)BeautifulSoup(html, "lxml")速度快,容錯強需要額外安裝
lxml (XML)BeautifulSoup(html, "xml")唯一支持 XML 的解析器需要額外安裝
html5libBeautifulSoup(html, "html5lib")容錯最好,像瀏覽器一樣解析速度最慢

推薦使用 lxml,因為它最快!


2. 安裝 BeautifulSoup

安裝 BeautifulSoup

pip install beautifulsoup4

安裝 lxml(推薦)

pip install lxml

安裝 html5lib(可選)

pip install html5lib

3. 快速上手

(1)解析 HTML 字符串

from bs4 import BeautifulSouphtml = '''
<!DOCTYPE html>
<html>
<head><title>BeautifulSoup學習</title>
</head>
<body><p>Hello BeautifulSoup</p>
</body>
</html>
'''# 使用 lxml 解析器
soup = BeautifulSoup(html, "lxml")
print(soup.p.text)  # 輸出: Hello BeautifulSoup

(2)解析本地 HTML 文件

soup = BeautifulSoup(open("index.html"), "lxml")
print(soup.title.text)  # 輸出網頁標題

4. BeautifulSoup 的 4 種對象

(1)Tag(標簽)

  • 對應 HTML 里的標簽,如 <title><p>
  • 可以獲取標簽名 .name 和屬性 .attrs
tag = soup.title
print(tag.name)  # 輸出: title
print(tag.attrs)  # 輸出: {'class': ['tl']}

(2)NavigableString(文本內容)

  • 對應標簽里的文本內容,如 <p>Hello</p> 里的 "Hello"
  • 可以用 .string 獲取文本。
text = soup.p.string
print(text)  # 輸出: Hello BeautifulSoup

(3)BeautifulSoup(整個文檔)

  • 代表整個 HTML 文檔,可以看作最大的 Tag
  • 它的 .name[document]
print(soup.name)  # 輸出: [document]

(4)Comment(注釋)

  • 對應 HTML 注釋 <!-- 這是注釋 -->,但 .string 會去掉注釋符號。
comment = soup.find(text=lambda text: isinstance(text, Comment))
print(comment)  # 輸出: 這是注釋

5. 搜索文檔樹

(1)find_all() 查找所有匹配的標簽

# 查找所有 <a> 標簽
links = soup.find_all("a")# 查找 class="elsie" 的所有標簽
elsie_tags = soup.find_all(class_="elsie")# 查找 id="link1" 的標簽
link1 = soup.find_all(id="link1")# 查找文本包含 "BeautifulSoup" 的標簽
text_match = soup.find_all(text="BeautifulSoup")

(2)find() 查找第一個匹配的標簽

first_link = soup.find("a")  # 返回第一個 <a> 標簽

(3)CSS 選擇器(推薦!)

# 查找所有 <a> 標簽
soup.select("a")# 查找 class="elsie" 的所有標簽
soup.select(".elsie")# 查找 id="link1" 的標簽
soup.select("#link1")# 查找 body 下的所有 <a> 標簽
soup.select("body a")# 查找第一個匹配的標簽
soup.select_one(".elsie")

6. 總結

  • BeautifulSoup 是 Python 爬蟲必備的 HTML/XML 解析庫。
  • 推薦使用 lxml 解析器,因為它最快。
  • 4 種對象TagNavigableStringBeautifulSoupComment
  • 搜索方法
    • find_all() 查找所有匹配的標簽
    • find() 查找第一個匹配的標簽
    • select() 使用 CSS 選擇器(最方便!)

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

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

相關文章

AI電銷機器人智能的發展趨勢是什么?

AI電銷機器人智能的發展趨勢是什么&#xff1f;電銷機器人智能的發展前景怎么樣&#xff1f;隨著互聯網技術的不斷發展&#xff0c;AI電銷機器人智能已經成為了許多企業實現銷售數字化轉型的重要工具&#xff0c;我們一起來看看。 AI電銷機器人正突破傳統語音機械應答的邊界&a…

C++ 求圓面積的程序(Program to find area of a circle)

給定半徑r&#xff0c;求圓的面積。圓的面積應精確到小數點后5位。 例子&#xff1a; 輸入&#xff1a;r 5 輸出&#xff1a;78.53982 解釋&#xff1a;由于面積 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因為我們只保留小數點后 5 位數字。 輸…

C++_哈希表

本篇文章是對C學習的哈希表部分的學習分享 相信一定會對你有所幫助~ 那咱們廢話不多說&#xff0c;直接開始吧&#xff01; 一、基礎概念 1. 哈希核心思想&#xff1a; 哈希函數的作用&#xff1a;通過此函數建立一個Key與存儲位置之間的映射關系。理想目標&#xff1a;實現…

Mac M芯片 RAG 極簡流程 安裝 ragflow + LM studio

本文基于 【【知識科普】【純本地化搭建】【不本地也行】DeepSeek RAGFlow 構建個人知識庫】 https://www.bilibili.com/video/BV1WiP2ezE5a/?share_sourcecopy_web&vd_source9a55f12dd64d8e30ab6c0efc62844343 1 .docker-compose yml文件修改,指定平臺 platform: linux/…

Rsync+inotify+nfs實現數據實時備份方案

技術棧 NFS是 Network File System的簡寫&#xff0c;即網絡文件系統。NFS的優點是內核直接支持&#xff0c;部署簡單、運行穩定&#xff0c;協議簡單、傳輸效率高。缺點是僅依靠IP地址或主機名來決定用戶能否掛載共享目錄&#xff0c;容易出現單點故障。 rsync是linux系統下的…

Vue ⑥-路由

單頁應用程序 單頁應用程序&#xff0c;即 Single-Page Application&#xff0c;簡稱 SPA&#xff0c;是一種使用 JavaScript、HTML 和 CSS 構建的 Web 應用程序。SPA 的核心是前端路由&#xff0c;它使得用戶在訪問網站時&#xff0c;只需加載一次頁面&#xff0c;然后通過前…

Hadoop復習(九)

Azkaban工作流管理器 選擇 問題 1 判斷題 2 / 2 分 工作流是指具有依賴的一組job任務&#xff0c;被依賴的job任務最后執行 正確 錯誤 問題 2 判斷題 2 / 2 分 Azkaban兼容任何版本的Hadoop 正確 錯誤 問題 3 判斷題 2 / 2 分 獨立服務器模式下&#xff0c;Azkab…

SpringMVC相關知識(二)

一.重定向和轉發 1.ModelandView 設置ModelAndView對象 , 根據view的名稱 , 和視圖解析器跳到指定的頁面 頁面 : {視圖解析器前綴} viewName {視圖解析器后綴} 相關代碼&#xff1a; <!-- 視圖解析器 --> <bean class"org.springframework.web.servlet.vi…

std::ratio 簡單使用舉例

author: hjjdebug date: 2025年 06月 09日 星期一 14:28:40 CST descrip: std::ratio 簡單使用舉例 文章目錄 1. 先看一個簡單的例子 1/2/1/35/62 std::ratio 的手冊頁3. std::ratio_add 到底是什么呢&#xff1f;4. 代碼注釋5. 加深理解.6. 自定義的std::ratio 與 std::ratio_…

Docker 優勢與缺點全面解析:容器技術的利與弊

在當今云計算、微服務、DevOps盛行的時代&#xff0c;Docker 幾乎成了開發者、運維工程師的標配工具之一。自2013年誕生以來&#xff0c;Docker 以其輕量、快速、易移植的特點&#xff0c;徹底改變了應用的構建、交付與部署方式。 但任何技術都有兩面性&#xff0c;Docker 也不…

大語言模型(LLM)中的KV緩存壓縮與動態稀疏注意力機制設計

隨著大語言模型&#xff08;LLM&#xff09;參數規模的增長&#xff0c;推理階段的內存占用和計算復雜度成為核心挑戰。傳統注意力機制的計算復雜度隨序列長度呈二次方增長&#xff0c;而KV緩存的內存消耗可能高達數十GB&#xff08;例如Llama2-7B處理100K token時需50GB內存&a…

排序算法總結(C++)

目錄 一、穩定性二、排序算法選擇、冒泡、插入排序歸并排序隨機快速排序堆排序基數排序計數排序 三、總結 一、穩定性 排序算法的穩定性是指&#xff1a;同樣大小的樣本 **&#xff08;同樣大小的數據&#xff09;**在排序之后不會改變原始的相對次序。 穩定性對基礎類型對象…

使用Redis作為緩存優化ElasticSearch讀寫性能

在現代數據密集型應用中,ElasticSearch憑借其強大的全文搜索能力成為許多系統的首選搜索引擎。然而,隨著數據量和查詢量的增長,ElasticSearch的讀寫性能可能會成為瓶頸。本文將詳細介紹如何使用Redis作為緩存層來顯著提升ElasticSearch的讀寫性能,包括完整的架構設計、詳細…

獲取wordpress某個欄目的內容數量

獲取wordpress某個欄目的內容數量 <?php // 將以下 8 改成你的分類 ID 即可echo get_category(8)->count;?> 在制作wordpress模板時&#xff0c;有時會需要調用某個分類目錄下的所有內容數量&#xff0c;通過這段簡潔的代碼就可以實現。 給WordPress自定義字段加…

uniapp 安卓 APP 后臺持續運行(保活)的嘗試辦法

在移動應用開發領域&#xff0c;安卓系統的后臺管理機制較為復雜&#xff0c;應用在后臺容易被系統回收&#xff0c;導致無法持續運行。對于使用 Uniapp 開發的安卓 APP 來說&#xff0c;實現后臺持續運行&#xff08;保活&#xff09;是很多開發者面臨的重要需求&#xff0c;比…

深度學習——知識提煉

第一部分&#xff1a;引言與背景——為什么需要知識提煉&#xff1f; 一、模型壓縮的背景 隨著深度學習的發展&#xff0c;模型變得越來越大&#xff08;如 ResNet152、BERT、ViT、GPT 等&#xff09;&#xff0c;其參數量動輒數億甚至上百億。這些大模型雖然性能強大&#x…

開源之夏·西安電子科技大學站精彩回顧:OpenTiny開源技術下沉校園,點燃高校開發者技術熱情

開源之夏2025編程活動正在如火如荼的進行中&#xff0c;當前也迎來了報名的倒計時階段&#xff0c;開源之夏組織方也通過高校行系列活動進入各大高校&#xff0c;幫助高校開發者科普開源文化、開源活動、開源技術。 6月4日 開源之夏攜手多位開源技術大咖、經驗型選手走進西安電…

時間復雜度和算法選擇

數據范圍 時間復雜度 算法選擇 n \leq 30 指數級別 O(2^n) 深度優先搜索&#xff08;DFS&#xff09; 剪枝、狀態壓縮動態規劃 n \leq 100 O(n^3) Floyd 算法、動態規劃、高斯消元 n \leq 1000 O(n^2) 、 O(n^2 \log n) 動態規劃、二分…

數據分析實戰2(Tableau)

1、Tableau功能 數據賦能&#xff08;讓業務一線也可以輕松使用最新數據&#xff09; 分析師可以直接將數據看板發布到線上自動更新看板自由下載數據線上修改圖表郵箱發送數據設置數據預警 數據探索&#xff08;通過統計分析和數據可視化&#xff0c;從數據發現問題&#xf…

CentOS7_Linux下安裝Docker和docker-compose

目錄 環境要求安裝步驟1、修改鏡像源配置文件2、卸載舊版本 Docker&#xff08;如有&#xff09;3、安裝依賴工具4、添加 Docker 官方倉庫5、安裝 Docker 引擎6、啟動 Docker 并設置開機自啟7、驗證安裝8、配置鏡像加速器創建配置文件重啟 Docker 生效 9、允許非 root 用戶操作…