Python - 爬蟲利器 - BeautifulSoup4常用 API

文章目錄

    • 前言
    • BeautifulSoup4 簡介
      • 主要特點:
      • 安裝方式:
    • 常用 API
      • 1. 創建 BeautifulSoup 對象
      • 2. 查找標簽
        • find(): 返回匹配的第一個元素
        • find_all(): 返回所有匹配的元素列表
        • select_one() & select(): CSS 選擇器
      • 3. 訪問標簽內容
        • text 屬性: 獲取標簽內純文本
        • get_text(): 同樣作用于獲取文本
        • attrs 屬性: 獲取標簽的所有屬性
        • [attribute]: 直接訪問某個屬性值
      • 4. 修改文檔
        • 添加新標簽
        • 刪除標簽
        • 替換標簽
      • 5. 導航樹結構
        • parent: 上級父節點
        • children: 下級子節點迭代器
        • siblings: 并列兄弟節點
    • 實戰小技巧(關鍵點)
      • F12打開控制臺
      • 復制對應圖片的css選擇器
      • 直接代碼中使用
    • 結束語

前言

在時光的長河里,每一滴水都是昨日的星辰,映照著永不重復的今天。

BeautifulSoup4 簡介

BeautifulSoup4(通常簡稱為 BS4)是一個用于解析 HTML 和 XML 文檔的 Python 庫。它的設計目的是簡化從復雜網頁中提取數據的過程。BeautifulSoup4 可以處理各種各樣的標記語言,并提供了一個簡單的接口來進行文檔導航、搜索和修改。

主要特點:

  • 跨平臺支持: Beautiful Soup 支持 Windows、Linux、Mac OS X 等多個操作系統。
  • 兼容性強: 支持多種解析器,包括 Python 內置的標準庫解析器 (html.parser)、第三方解析器 lxmlhtml5lib
  • 易于學習: 提供了簡單且直觀的 API,適合初學者使用。
  • 強大功能: 包含豐富的函數和方法,可以幫助開發者高效地完成任務。

安裝方式:

你可以通過 pip 工具輕松安裝 BeautifulSoup4:

pip install beautifulsoup4

常用 API

以下是 BeautifulSoup4 中一些常用的 API 方法和功能:

1. 創建 BeautifulSoup 對象

首先,你需要創建一個 BeautifulSoup 對象來解析 HTML 或 XML 文檔。

from bs4 import BeautifulSoup# 使用默認的 html.parser 解析器
html_doc = "<html><head><title>Example Page</title></head><body id='id'><a href='123'></a><p class='my-class child-class'><i>444</i><h1>Hello World</h1></p></body></html>"
soup = BeautifulSoup(html_doc, 'html.parser')# 打印解析后的結果
print(soup.prettify())

2. 查找標簽

可以通過標簽名稱或其他屬性來查找特定的元素。

find(): 返回匹配的第一個元素
first_paragraph = soup.find('p')
print(first_paragraph)  # 輸出: <p>Hello World</p>
find_all(): 返回所有匹配的元素列表
all_headings = soup.find_all(['h1', 'h2'])
for heading in all_headings:print(heading.text)
select_one() & select(): CSS 選擇器
css_selector_example = soup.select_one('.my-class')
print(css_selector_example)css_selectors_examples = soup.select('#id > .child-class')
for element in css_selectors_examples:print(element.text)

3. 訪問標簽內容

訪問標簽內的文本和其他屬性。

text 屬性: 獲取標簽內純文本
text_content = first_paragraph.text
print(text_content)  # 輸出: Hello World
get_text(): 同樣作用于獲取文本
get_text_content = first_paragraph.get_text()
print(get_text_content)  # 輸出: Hello World
attrs 屬性: 獲取標簽的所有屬性
attributes = first_paragraph.attrs
print(attributes)  # 如果沒有其他屬性,則為空字典 {}
[attribute]: 直接訪問某個屬性值
link_tag = soup.a
href_value = link_tag['href']
print(href_value)

4. 修改文檔

除了查詢外,還可以動態地添加、刪除或修改文檔中的節點。

添加新標簽
new_tag = soup.new_tag("b")
new_tag.string = "Bold Text"
first_paragraph.append(new_tag)
print(first_paragraph)  # 輸出: <p>Hello World<b>Bold Text</b></p>
刪除標簽
tag_to_remove = soup.b
tag_to_remove.decompose()
print(first_paragraph)  # 輸出: <p>Hello World</p>
替換標簽
replacement_tag = soup.new_tag("i")
replacement_tag.string = "Italic Text"
first_paragraph.i.replace_with(replacement_tag)
print(first_paragraph)  # 輸出: <p>Hello World<i>Italic Text</i></p>

5. 導航樹結構

BeautifulSoup 還提供了多種方法來遍歷和操作 DOM 樹。

parent: 上級父節點
parent_node = first_paragraph.parent
print(parent_node.name)  # 輸出: body
children: 下級子節點迭代器
children_nodes = list(first_paragraph.children)
for child in children_nodes:print(child)
siblings: 并列兄弟節點
next_sibling = first_paragraph.next_sibling
previous_sibling = first_paragraph.previous_sibling
print(next_sibling)
print(previous_sibling)

實戰小技巧(關鍵點)

實際情況下,很多節點不好找到,可以利用瀏覽器功能,可以直接復制css選擇器

F12打開控制臺

F12打開控制臺

復制對應圖片的css選擇器

復制css選擇器

直接代碼中使用

from bs4 import BeautifulSoup# 使用默認的 html.parser 解析器
html_doc = "<html></html>"
soup = BeautifulSoup(html_doc, 'html.parser')
# 只是為了示例  不可運行 以下是復制出來的內容
soup.select('#ice-container > div.tbpc-layout > div.screen-outer.clearfix > div.main > div.core.J_Core > div > div:nth-child(1) > div:nth-child(1) > div > div > div > div > div:nth-child(3) > div > div > a')

結束語

文章中API都驗證過,可直接運行👽👽👽
運行有問題可聯系作者評論交流🤭🤭🤭
風是自由的,你也是自由🤠🤠🤠
歡迎一起交流學習??????
有幫助請留下足跡 一鍵三連🥰🥰🥰
爬蟲大佬勿噴,歡迎指正問題😈😈😈
后面會做一系列的爬蟲文章,請持續關注作者🤡🤡🤡。

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

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

相關文章

DeepSeek驅動下的數據倉庫范式轉移:技術解耦、認知重構與治理演進

DeepSeek驅動下的數據倉庫范式轉移&#xff1a;技術解耦、認知重構與治理演進 ——基于多場景實證的架構革命研究 一、技術解耦&#xff1a;自動化編程范式的演進 1.1 語義驅動的ETL生成機制 在金融風控場景中&#xff0c;DeepSeek通過動態語法樹解析&#xff08;Dynamic Syn…

代碼隨想錄算法訓練營day38(補0206)

如果求組合數就是外層for循環遍歷物品&#xff0c;內層for遍歷背包。 如果求排列數就是外層for遍歷背包&#xff0c;內層for循環遍歷物品。 1.零錢兌換 題目 322. 零錢兌換 給你一個整數數組 coins &#xff0c;表示不同面額的硬幣&#xff1b;以及一個整數 amount &#xff0c…

golang channel底層實現?

底層數據實現 type hchan struct { qcount uint // 當前隊列中的元素數量 dataqsiz uint // 環形隊列的大小 buf unsafe.Pointer // 指向環形隊列的指針 elemsize uint16 // 元素大小 closed uint32 // chan…

圖的最小生成樹算法: Prim算法和Kruskal算法(C++)

上一節我們學習了最短路徑算法, 這一節來學習最小生成樹. 最小生成樹(Minimum Spanning Tree, MST)算法是圖論中的一種重要算法, 主要用于在加權無向圖中找到一棵生成樹, 使得這棵樹包含圖中的所有頂點, 并且所有邊的權重之和最小. 這樣的樹被稱為最小生成樹. 最小生成樹廣泛應…

矩陣系統源碼搭建的數據管理開發功能解析,支持OEM

一、引言 在矩陣系統中&#xff0c;數據猶如血液&#xff0c;貫穿整個系統的運行。高效的數據管理開發功能是確保矩陣系統穩定、可靠運行的關鍵&#xff0c;它涵蓋了數據的存儲、處理、安全等多個方面。本文將深入探討矩陣系統源碼搭建過程中數據管理功能的開發要點。 二、數據…

DeepSeek 助力 Vue 開發:打造絲滑的日期選擇器(Date Picker),未使用第三方插件

前言&#xff1a;哈嘍&#xff0c;大家好&#xff0c;今天給大家分享一篇文章&#xff01;并提供具體代碼幫助大家深入理解&#xff0c;徹底掌握&#xff01;創作不易&#xff0c;如果能幫助到大家或者給大家一些靈感和啟發&#xff0c;歡迎收藏關注哦 &#x1f495; 目錄 Deep…

操作系統知識點2

1.P&#xff0c;V操作可以實現進程同步&#xff0c;進程互斥&#xff0c;進程的前驅關系 2.先來先服務調度算法是不可搶占的算法 3.UNIX操作系統中&#xff0c;對文件系統中空閑區的管理通常采用成組鏈接法 4.對于FAT32文件系統&#xff0c;它采用的是鏈接結構 5.不同的I/O…

【個人開發】deepspeed+Llama-factory 本地數據多卡Lora微調【完整教程】

文章目錄 1.背景2.微調方式2.1 關鍵環境版本信息2.2 步驟2.2.1 下載llama-factory2.2.2 準備數據集2.2.3 微調模式2.2.3.1 zero-1微調2.2.3.2 zero-2微調2.2.3.3 zero-3微調2.2.3.4 單卡Lora微調 2.2.4 實驗2.2.4.1 實驗1&#xff1a;多GPU微調-zero12.2.4.2 實驗2&#xff1a;…

iOS 中使用 FFmpeg 進行音視頻處理

在 iOS 中使用 FFmpeg 進行音視頻處理,通常需要將 FFmpeg 的功能集成到項目中。由于 FFmpeg 是一個 C 庫,直接在 iOS 中使用需要進行一些配置和封裝。 1. 在 iOS 項目中集成 FFmpeg 方法 1:使用 FFmpeg 預編譯庫 下載 FFmpeg iOS 預編譯庫: 可以從以下項目中獲取預編譯的 …

Elasticsearch:將 Ollama 與推理 API 結合使用

作者&#xff1a;來自 Elastic Jeffrey Rengifo Ollama API 與 OpenAI API 兼容&#xff0c;因此將 Ollama 與 Elasticsearch 集成非常容易。 在本文中&#xff0c;我們將學習如何使用 Ollama 將本地模型連接到 Elasticsearch 推理模型&#xff0c;然后使用 Playground 向文檔提…

openGauss 3.0 數據庫在線實訓課程18:學習視圖管理

前提 我正在參加21天養成好習慣| 第二屆openGauss每日一練活動 課程詳見&#xff1a;openGauss 3.0.0數據庫在線實訓課程 學習目標 掌握openGauss視圖的管理&#xff1a;創建視圖、刪除視圖、查詢視圖的信息、修改視圖的信息。 課程作業 1.創建表&#xff0c;創建普通視圖…

騰訊云大模型知識引擎×DeepSeek賦能文旅

騰訊云大模型知識引擎DeepSeek賦能文旅 ——以合肥文旅為例的技術革新與實踐路徑 一、技術底座&#xff1a;知識引擎與DeepSeek的融合邏輯 騰訊云大模型知識引擎與DeepSeek模型的結合&#xff0c;本質上是**“知識庫檢索增強生成&#xff08;RAG&#xff09;實時聯網能力”**…

利用SkinMagic美化MFC應用界面

MFC(Microsoft Foundation Class)應用程序的界面設計風格通常比較保守,而且雖然MFC框架的控件功能強大且易于集成,但視覺效果較為樸素,缺乏現代感。尤其是MFC應用程序的設計往往以功能實現為核心,界面設計可能顯得較為簡潔甚至略顯呆板,用戶體驗可能不如現代應用程序流暢…

qt QOpenGLTexture詳解

1. 概述 QOpenGLTexture 是 Qt5 提供的一個類&#xff0c;用于表示和管理 OpenGL 紋理。它封裝了 OpenGL 紋理的創建、分配存儲、綁定和設置像素數據等操作&#xff0c;簡化了 OpenGL 紋理的使用。 2. 重要函數 構造函數&#xff1a; QOpenGLTexture(const QImage &image,…

nlp|微調大語言模型初探索(2),訓練自己的聊天機器人

前言 上篇文章記錄了具體的微調語言大模型步驟&#xff0c;以及在微調過程中可能遇見的各種報錯&#xff0c;美中不足的是只是基于開源數據集的微調&#xff0c;今天來記錄一下怎么基于自己的數據集去微調大語言模型&#xff0c;訓練自己的智能機器人&#xff01;&#xff01;&…

Java 大視界 -- 量子計算時代 Java 大數據的潛在變革與應對策略(88)

&#x1f496;親愛的朋友們&#xff0c;熱烈歡迎來到 青云交的博客&#xff01;能與諸位在此相逢&#xff0c;我倍感榮幸。在這飛速更迭的時代&#xff0c;我們都渴望一方心靈凈土&#xff0c;而 我的博客 正是這樣溫暖的所在。這里為你呈上趣味與實用兼具的知識&#xff0c;也…

手機功耗BugReport字段含義介紹

BugReport一般用來分析功耗問題&#xff0c;例如休眠待機&#xff0c;后臺待機&#xff0c;游戲&#xff0c;視頻&#xff0c;相機場景等 BugReport字段含義介紹 BugReport字段 含義 備注 Reboot 設備的重啟事件 CPU running CPU運行狀態&#xff0c;休眠 或者 喚醒 只有…

什么是 近端策略優化算法PPO

什么是 近端策略優化算法PPO 近端策略優化算法(Proximal Policy Optimization,PPO)是OpenAI公司于2017年開發的一系列無模型強化學習算法,用于優化策略網絡以最大化累計獎勵。以下是具體介紹及示例: 算法原理 策略梯度:PPO基于策略梯度算法,通過估計策略網絡的梯度來更…

計算機視覺-局部特征

一、局部特征 1.1全景拼接 先用RANSAC估計出變換&#xff0c;就可以拼接兩張圖片 ①提取特征 ②匹配特征 ③拼接圖像 1.2 點的特征 怎么找到對應點&#xff1f;&#xff08;才能做點對應關系RANSAC&#xff09; &#xff1a;特征檢測 我們希望找到的點具有的特征有什么特…

個人搭建CDN加速服務 特網科技

在互聯網快速發展的今天&#xff0c;網站的加載速度對用戶體驗有著至關重要的影響&#xff0c;傳統的網頁加載方式依賴于服務器的性能和網絡環境&#xff0c;這使得某些網站的頁面加載時間過長&#xff0c;用戶體驗不佳&#xff0c;為了解決這個問題&#xff0c;許多企業開始采…