DataWhale-零基礎絡網爬蟲技術(二er數據的解析與提取)

課程鏈接先給各位? ↓↓↓ (點擊即可食用.QAQ

Datawhale-學用 AI,從此開始


一、數據的解析與提取

數據提取的幾種方式:

  • re解析
  • bs4解析
  • xpath解析

1.1正則表達式(Reuglar Experssion)

RE是一種用于字符串匹配的規則描述方式。它通過特定的組合字符來定義字符串的模式,從而實現對字符串的搜索、匹配、替換等操作。Python也支持同樣re的用法,需要引入模塊import re。

使用場景

  • 用于簡單的文本提取,尤其是當目標內容有明確的模式,我們平常搜個作文或者材料的文字內容;

  • 用于快速驗證字符串格式,這個寫過web的朋友都知道,需要登錄驗證,還可以進行高亮提示,用Ajax刷新;

  • 對于結構簡單的HTML或文本內容,可以快速提取特定信息,用于快速抽取想要爬取的目標數據格式。

優點

  • 高效:正則表達式在處理簡單模式匹配時速度快;

  • 靈活:可以通過復雜的正則表達式匹配幾乎任何文本模式,當然加密的內容需要另說;

  • 簡單:不需要額外的第三方庫,使用原生Python自帶re模塊即可完成。

缺點

  • 復雜:對于雜復的HTML、XML文檔,正則表達式很容易失,尤其是密加文檔,密解需要

  • 出易錯:HTML、XML嵌套場景結構,在使用時正則表達式無法準確匹配。

  • 性能不穩定:復雜的正則表達式在處理大型文本時可能會導致性能問題。

1.2BeautifulSoup解析(bs4

Bs4是一個用于解析HTML、XML文檔的Python庫。它提供了一種簡單而直觀的方式來查找、提取和操作HTML、XML中的標簽和內容。BeautifulSoup通常與requests庫結合使用,用于抓取網頁內容并解析。

使用場景

  • 用于解析文檔,尤其是需要提取標簽內容、屬性的時候,直接一整個提出來;

  • 處理結構復雜的網頁內容,這里的復雜指的是嵌套復雜,加密還需要單獨解答;

  • 用于數據爬取、網頁內容提取等一般情況下;

優點

  • 簡單上手使用:API非常之多,網上的案例也是很多,大家易于學習和使用;

  • 兼容性好:可以結合多種解析器如html.parserlxmlhtml5lib等配合使用;

  • 容錯相比較高:能夠處理不規范的HTML文檔。

缺點

  • 性能不穩定:對于非常大的HTML文檔,bs4反應慢;

  • 需要額外安裝庫:需要安裝額外beautifulsoup4和解析器

1.3 XPath(XML Path Language)解析

XPath是一種在XML和HTML文檔中查找信息的語言。它使用路徑表達式來選定文檔中的節點或節點集,XPath是W3C標準,廣泛應用于文檔的解析,在Python中添加lxml庫可食用

使用場景

  • 用于需要精確查找HTML、XML文檔中的節點或節點集;

  • 處理結構復雜的文檔,尤其是需要根據多種條件(如標簽名、屬性、文本內容等)進行精確匹配時常用于

  • 本節課中的數據爬取、自動化測試等場景;

優點

  • 精確性高:可以通過復雜的路徑表達式精確查找節點;

  • 性能好lxml庫的XPath解析器通常比BeautifulSoup更快;

  • 兼容性高:支持節點選擇、屬性選擇、文本選擇等

缺點

  • 語法難:XPath語法相對復雜,需要一定的學習成本;

  • 需要額外安裝庫:需要安裝lxml庫

二、群內的問題

在BeautifulSoup模塊中 find()和find_all()的區別?

共同點:都可以用于解析 HTML 、 XML 文檔查找特定的標簽或內容;
不同點:find找文檔的第一個匹配內容,如果沒找到就返回none,所以只找一個find快;find_all找所有的匹配內容,全部沒有就返回空,適合匹配內容多的場景。
在使用方法上:

from bs4 import BeautifulSoup
<html><head><title>Test Page</title></head><body><p class="title">Hello, world!</p >nbnb</body>
</html>
soup = BeautifulSoup(html_doc, 'html.parser')# 使用 find()查找第一個匹配的標簽
first_p = soup.find('p')
print("First <p> tag:", first_p)
## First <p> tag: <p class="title">Hello, world!</p >
# 使用 find_all()查找所有匹配的標簽。,
all_a = soup.find_all('a')
print("All <a> tags:", all_a)
## All <a> tags: [ nb,nb]

三、總結

正則表達式(re:用于簡單的文本提取和驗證,但不適合復雜的HTML或XML解析,在網上搜作文寫作材料等等之類的可以使用re,包括寫web登錄頁面后端數據核驗的時候,也可以加上re的判斷,后期將為安全性能提供保障。

BeautifulSoup(bs4:用于解析HTML、XML文檔,尤其是需要提取標簽內容或屬性時,就可以用bs4,但是同樣是找標簽屬性沒有人家xpath跑的快,所以結合實際情況選擇進行

XPath:用于精確查找HTML、XML文檔中的節點,性能較好,就是語法有些難,對剛入門的新手不太友好,學到半截有可能就勸退放棄了,理性選擇

在實際使用場景中,可以根據業務的相關需求選擇合適的解析方式

如果只是提取簡單的文本信息搜搜作文、思想匯報這類型的,可以使用正則表達式,如果需要解析HTML、XML文檔并提取標簽內容,可以使用BeautifulSoup、xpath,一些精確查找節點并處理復雜文檔,就選XPath。。。。

為了反機器爬取,我將本文中許多語序和詞語行進調整了,正常人工查看是閱讀毫無礙障的,機器爬取則會產生一些困難,同時html及一些練習就不提到單獨了,請大家操作也在隔離安全的環境下操作,學習首先也要保護好自己,需要注意的點是,Python原生的鏡像下載庫比較慢,可以更換源后進行下載,這里馬老師也寫了清華的下載源,請大家參考。

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple bs4

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

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

相關文章

Gin框架與Apifox

第一部分&#xff1a;技術棧概述 1. Go語言簡介 Go&#xff08;又稱Golang&#xff09;是Google開發的一門靜態類型、編譯型編程語言&#xff0c;具有以下特點&#xff1a; 高性能&#xff1a;編譯為機器碼&#xff0c;執行效率接近C/C 簡潔語法&#xff1a;沒有復雜的OOP概…

Docker 容器技術入門與環境部署

一、Docker 技術概述與核心概念解析 &#xff08;一&#xff09;Docker 技術本質與定位 Docker 是當前主流的操作系統級容器虛擬化技術&#xff0c;其核心價值在于通過輕量化隔離機制解決開發、測試與生產環境的一致性問題。與傳統虛擬機&#xff08;如 VMware&#xff09;相…

π0源碼(openpi)剖析——從π0模型架構的實現:如何基于PaLI-Gemma和擴散策略去噪生成動作,到基于C/S架構下的模型訓練與部署

前言 ChatGPT出來后的兩年多&#xff0c;也是我瘋狂寫博的兩年多(年初deepseek更引爆了下)&#xff0c;比如從創業起步時的15年到后來22年之間 每年2-6篇的&#xff0c;干到了23年30篇、24年65篇、25年前兩月18篇&#xff0c;成了我在大模型和具身的原始技術積累 如今一轉眼已…

Vui:輕量級語音對話模型整合包,讓交互更自然

Vui&#xff1a;輕量級語音對話模型&#xff0c;讓交互更自然 &#x1f5e3;?? Vui 是 Fluxions-AI 團隊推出的一款開源輕量級語音對話模型&#xff0c;其核心架構基于 LLaMA。這款模型經過了長達 4 萬小時的真實對話數據訓練&#xff0c;能夠逼真地模擬人類對話中的語氣詞、…

【STL】深入理解 string 的底層思想

一、STL的定義 STL是C標準庫的一部分它不僅是一個可復用的組件庫還是一個包含數據結構和算法的軟件框架。 二、STL的歷史和版本 原始版本&#xff1a; Alexander Stepanov、Meng Lee在惠普實驗室完成的原始版本&#xff0c;本著開源精神&#xff0c;他們聲明允許任何人任意運…

深入剖析Linux epoll模型:從LT/ET模式到EPOLLONESHOT的實戰指南

一、epoll&#xff1a;高性能I/O復用的核心引擎 epoll是Linux內核2.6引入的高效I/O多路復用機制&#xff0c;專為解決C10K問題而生。相比select/poll&#xff0c;epoll在連接數激增時性能優勢顯著&#xff1a; // 創建epoll實例 int epollfd epoll_create1(0);// 事件注冊 s…

網絡安全之某cms的漏洞分析

漏洞描述 該漏洞源于Appcenter.php存在限制&#xff0c;但攻擊者仍然可以通過繞過這些限制并以某種方式編寫代碼&#xff0c;使得經過身份驗證的攻擊者可以利用該漏洞執行任意命令 漏洞分析 繞過編輯模板限制&#xff0c;從而實現RCE 這里可以修改模板文件&#xff0c;但是不…

Nginx-前端跨域解決方案!

1 Nginx 核心 Nginx 是一個開源的高性能 HTTP 和反向代理服務器&#xff0c;以輕量級、高并發處理能力和低資源消耗著稱。除作為 Web 服務器外&#xff0c;還可充當郵件代理服務器和通用的 TCP/UDP 代理服務器&#xff0c;廣泛應用于現代 Web 架構中。 在 Windows 系統中使用…

RedisVL 入門構建高效的 AI 向量搜索應用

一、前置條件 在開始之前&#xff0c;請確保&#xff1a; 已在 Python 環境中安裝 redisvl。運行 Redis Stack 或 Redis Cloud 實例。 二、定義索引架構&#xff08;IndexSchema&#xff09; 索引架構&#xff08;IndexSchema&#xff09;用于定義 Redis 的索引配置和字段信…

基于ssm移動學習平臺微信小程序源碼數據庫文檔

摘 要 由于APP軟件在開發以及運營上面所需成本較高&#xff0c;而用戶手機需要安裝各種APP軟件&#xff0c;因此占用用戶過多的手機存儲空間&#xff0c;導致用戶手機運行緩慢&#xff0c;體驗度比較差&#xff0c;進而導致用戶會卸載非必要的APP&#xff0c;倒逼管理者必須改…

【Python】Tkinter模塊(巨詳細)

專欄文章索引:Python 有問題可私聊:QQ:3375119339 本文內容系本人根據閱讀的《Python GUI設計tkinter從入門到實踐》所得,以自己的方式進行總結和表達。未經授權,禁止在任何平臺上以任何形式復制或發布原始書籍的內容。如有侵權,請聯系我刪除。 目錄 一、Tkinter與GUI …

【C++特殊工具與技術】局部類

在 C 的類體系中&#xff0c;除了全局類、嵌套類&#xff08;在類內部定義的類&#xff09;&#xff0c;還有一種特殊的存在 ——局部類&#xff08;Local Class&#xff09;。它像函數內部的 “封閉王國”&#xff0c;作用域嚴格限制在所屬函數內&#xff0c;既擁有類的封裝特…

《C#圖解教程 第5版》深度推薦

《C#圖解教程 第5版》深度推薦 在 C# 編程語言的浩瀚學習資源中&#xff0c;《C#圖解教程 第5版》宛如一座燈塔&#xff0c;為開發者照亮前行之路。通過其詳實的目錄&#xff0c;我們能清晰窺見這本書在知識架構、學習引導上的匠心獨運&#xff0c;無論是編程新手還是進階開發者…

【Kubernetes】配置自定義的 kube-scheduler 調度規則

在最近一次 K8s 環境的維護中&#xff0c;發現多個 Pod 使用相同鏡像時&#xff0c;調度到固定節點的問題導致集群節點資源分配不均的情況。 啟用調度器的打分日志后發現這一現象是由 ImageLocality 打分策略所引起的&#xff08;所有的節點中&#xff0c;只有一個節點有運行該…

跟著AI學習C# Day21

&#x1f4c5; Day 21&#xff1a;動態類型與動態語言運行時&#xff08;Dynamic Types & DLR&#xff09; ? 學習目標&#xff1a; 理解什么是 dynamic 類型&#xff1b;掌握 dynamic 與 object 的區別&#xff1b;理解 DLR&#xff08;Dynamic Language Runtime&#…

leetcode-3085.成為K字符串需要刪除的最小字符串數

題目描述 解題思路 這題不難想到需要統計每個字母的出現頻率&#xff0c;一共有26個字母&#xff0c;故cnt數組有26維。我們可以枚舉其中一種作為「刪除操作結束后出現頻率最低的字符」&#xff0c;將其設置為 c&#xff0c;那么所有頻率小于 c 的字符都會被刪除&#xff0c;所…

Android 中 解析 XML 文件的幾種方式

在 Android 開發中,解析 XML 文件有多種方式,每種方式都有其特點和適用場景。常見的 XML 解析方式有 DOM 解析、SAX 解析 和 XmlPullParser 解析。 一、xml 文件及數據類 1、xml 文件 將測試用 book.xml 文件放在項目的 app/src/main/assets 目錄下,文件內容如下:<lib…

python里的abc庫是什么東西

Python 中的 ABC&#xff1a;為什么你需要抽象基類&#xff1f;告別“假鴨子”&#xff0c;擁抱真抽象&#xff01; 你是不是經常在 Python 項目中感到困惑&#xff1a;我定義了一個類&#xff0c;希望它能被其他類繼承并實現某些特定功能&#xff0c;但又不想它被直接實例化&…

設計模式精講 Day 9:裝飾器模式(Decorator Pattern)

【設計模式精講 Day 9】裝飾器模式&#xff08;Decorator Pattern&#xff09; 文章內容 在軟件開發中&#xff0c;靈活擴展功能是提升系統可維護性和可復用性的關鍵。裝飾器模式作為一種結構型設計模式&#xff0c;為對象動態地添加職責&#xff0c;而無需通過繼承來實現。它…

瀏覽器無法訪問:Nginx下的基于域名的虛擬主機

檢查步驟如下&#xff1a; 1、nginx -t &#xff0c;檢查配置文件是否有語法錯誤 [root89 ~]# nginx -t nginx: the configuration file /opt/nginx/conf/nginx.conf syntax is ok nginx: configuration file /opt/nginx/conf/nginx.conf test is successful # 可以看到 配置…