01 Python 網絡爬蟲:爬蟲技術的核心原理

不夸張地說,現在哪怕是初中生,只要花點兒時間、精力稍微按「網絡爬蟲」的開發步驟學習了解一下,也能把它玩得賊溜。

聽起來感覺是很高大上的東西,但實際上并不復雜,也就是使用了某種編程語言按照一定步驟、規則主動通過互聯網來抓取某些特定信息的代碼程序。

現在常見的就是使用 Python 來實現網絡爬蟲,后面慢慢講。

1、基本原理

其它慢點兒再說,咱先來簡單了解一下網絡爬蟲的實現原理。

網絡爬蟲是指按照一定的規則,自動從互聯網上抓取網頁信息的程序。網絡爬蟲是搜索引擎的重要組成部分,它通過不斷地訪問和抓取網頁信息,來建立索引和更新搜索結果。

網絡爬蟲的實現原理主要包括以下幾個步驟,然后我再解釋一下:

  1. 發送 HTTP 請求
  2. 接收 HTTP 響應
  3. 解析 HTML 頁面
  4. 提取數據
  5. 保存數據

發送 HTTP 請求

網絡爬蟲首先需要發送 HTTP 請求到網站服務器,請求獲取網頁信息。HTTP 請求包含了網頁的 URL 地址、請求方式、請求頭和請求體等信息。

接收 HTTP 響應

網站服務器收到 HTTP 請求后,會返回 HTTP 響應。HTTP 響應包含了網頁的 HTML 代碼、響應頭和響應體等信息。

解析 HTML 頁面

網絡爬蟲接收到 HTTP 響應后,需要解析 HTML 頁面,以獲取網頁中的數據。HTML 頁面由 HTML 標簽組成,每個 HTML 標簽都有自己的屬性和值。網絡爬蟲通過解析 HTML 標簽,可以獲取網頁中的數據,例如文本、圖像、鏈接等。

提取數據

網絡爬蟲解析HTML頁面后,需要提取網頁中需要的數據。網絡爬蟲可以通過正則表達式、XPath 或 CSS 選擇器來提取網頁中的數據。

保存數據

網絡爬蟲提取網頁中的數據后,需要將數據保存到數據庫或文件中。數據可以保存為文本格式、CSV 格式、JSON 格式或XML格式等。

網絡爬蟲是搜索引擎的重要組成部分,它通過不斷地訪問和抓取網頁信息,來建立索引和更新搜索結果。網絡爬蟲還被用于其他領域,例如數據采集、內容分析、用戶行為分析等。

如果說,咱現在單純使用 Python 來實現的話,大概就兩大步驟:

第一步,使用 Python 的網絡模塊(urllib2\httplib\requests)來模擬客戶端向服務端發送請求,在服務端正常響應之后,服務端即可接收到需要處理的相關網頁信息。

第二步,在服務端可以通過一些數據過濾模塊(lxml\html.parser\re)將目標信息從網頁中過濾出來。

有時候,在反爬蟲操作時,可以在 Python 發送的請求中添加相關的 Header 和 Cookies,還可以利用代理、設置間隔訪問的時間等等。

在過濾數據的時候,其實很簡單,只需要熟悉過濾模塊的規則即可。只是說在剛接觸的時候,那些模塊中的規則很多,不過用得多了自然就記得熟了。

一般來說,熟練使用其中一個模塊基本夠用了,如果真碰上一個模塊無法萬一過濾好有效信息,那么就使用多模塊協作的方式。

如果你之前也用過,就知道正則表達式(re)模塊就已經相當強了,雖然一開始用的時候總感覺很復雜,但在過濾數據這件事兒上相當高效的。

2、爬行策略

在需要使用爬蟲的時候,也就是數據很多的時候,如果有很多數據的話,那么就需要注意順序問題了,也就是說先爬哪一頁,然后再爬哪一頁,需要弄清楚。

爬行的順序,有點兒像二叉樹,一個是深度優先,一個是廣度優先,平時我們采用深度優先的方式比較多一些。

比如,我們先會去訪問第一個頁面 html01,然后找到第一個數據 data01;然后再去找第二個頁面 html02,找第二個數據 data02,以此類推。比如使用 bs 就是這種方式,后面我們會用到,這種方式比較常見。

還有就是采用廣度優先算法的,也很簡單。就是先去收集所有的網頁數據,然后挨個去過濾、獲取自己的有效數據。比如使用 PySpider,后面再給大家演示,不過這種方式用得比較少。

如果說,你要去爬大型的網站,或者說是多個網站的話,那就需要根據網站的大小、網頁的重要性以及權重等不同因素來分成不同的等級去爬取。

比較流行的爬行策略有 pagerank、opic 等等。

3、識別用戶

另外,服務端是如何識別用戶身份的呢?主要是 Cookie。在 Python 中,使用的模塊是 cookielib。

Cookie 是指網站為了識別用戶的身份,進行 session 跟蹤而存儲在用戶本地終端上的數據,當然為了安全,這個數據是加密的。

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

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

相關文章

用Java實現原神抽卡算法

哈嘍~大家好,好久沒有更新了,也確實遇到了很多事,這篇開始恢復更新,喜歡的話,可以給個的三連,什么?你要白嫖?那可以給個免費的贊麻。 🥇個人主頁:個人主頁??…

七月 NFT 行業解讀:游戲和音樂 NFT 引領增長,Opepen 掀起熱潮

作者:lesleyfootprint.network 2023 年 7 月,NFT 市場的波動性持續存在,交易量呈下降趨勢。然而,游戲和音樂 NFT 等領域的增長引人注目。參與這些細分領域的獨立用戶數量不斷增加,反映了這些領域的復蘇。 本綜合報告…

lvs負載均衡群集

lvs組成 1、lvs基于內核態的netfilter框架實現的IPVS功能,工作在內核態用戶配置VIP等相關信息并且傳遞到IPVS 就需要用到IPVSadm工具。 2、ipvsadm:IPVSadm是lvs用戶態的配套的工具,可以實現VIP和RS 增刪改查。 IPVSadm就是類似于iptables…

侯捷 八部曲 C++面向對象高級開發(上)+(下)【C++學習筆記】 超詳細 萬字筆記總結 筆記合集

文章目錄 Ⅰ C part1 面向對象編程1 頭文件與類的聲明1.1 c vs cpp關于數據和函數1.2 頭文件與類1.2.1 頭文件1.2.2 class的聲明1.2.3 模板初識 2 構造函數2.1 inline 函數2.2 訪問級別2.3 ctor 構造函數2.3.1 ctor 的寫法2.3.2 ctor/函數 重載2.3.3 ctor 放在 private 區 2.4 …

記vite打包vue項目內存溢出問題解決

出現問題 FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory解決方法一: 1.根據網上的資料是通過全局下載npm包increase-memory-limit: npm install -g increase-memory-limit2.在項目目錄執…

學習Vue:路由參數與查詢參數傳遞

在Vue.js中,路由與導航不僅涉及到頁面之間的切換,還包括了向頁面傳遞參數以及獲取查詢參數的功能。本文將詳細介紹如何在Vue Router中傳遞路由參數和查詢參數,幫助您更好地理解和使用這些功能。 路由參數的傳遞 路由參數是指在URL中的動態片…

K8s內部的網路模式實現理解

overlay 網絡模式 在 Kubernetes 中,overlay 網絡模式被用于實現容器之間的網絡通信。 K8s 使用了一種稱為容器網絡接口(Container Network Interface,簡稱CNI)的規范,該規范定義了容器如何進行網絡連接。實際上&…

SDP 與Rtcp-fb

1、sdp介紹 SDP(Session Description Protocol)是一種用于描述多媒體會話的協議,它在會話層起著重要的作用。SDP的主要功能是提供會話的元數據和配置信息,以便參與者能夠協商和建立一致的會話。 以下是SDP在會話層的作用&#x…

生活隨筆,記錄我的日常點點滴滴.

前言 😘個人主頁:曲終酣興晚^R的小書屋🥱 😕作者介紹:一個莽莽撞撞的🐻 💖專欄介紹:日常生活&往事回憶 😶?🌫?每日金句:被人暖一下就高熱&…

catboost推理開GPU加速

核心設置 model.predict(feature, task_type‘GPU’) 代碼參考 # 訓練配置 params {"catboost": {"n_estimators": 7000,"learning_rate": 0.03,"eval_metric": "AUC","loss_function": "RMSE",&qu…

【sgDragSize】自定義拖拽修改DIV尺寸組件,適用于窗體大小調整

核心原理就是在四條邊、四個頂點加上透明的div,給不同方向提供按下移動鼠標監聽 ,對應計算寬度高度、坐標變化 特性: 支持設置拖拽的最小寬度、最小高度、最大寬度、最大高度可以雙擊某一條邊,最大化對應方向的尺寸;再…

一次Linux中的木馬病毒解決經歷(6379端口---newinit.sh)

病毒入侵解決方案 情景 最近幾天一直CPU100%,也沒有注意看到了以為正常的服務調用,直到騰訊給發了郵件警告說我的服務器正在入侵其他服務器的6379端口,我就是正常的使用不可能去入侵別人的系統的,這是違法的. 排查 既然入侵6379端口,就懷疑是通過我的Redis服務進入的我的系統…

Vue基礎-1.知識導航

知識導航(就問全不全) 當學習 Vue.js 時,除了基本的 HTML、CSS 和 JavaScript 知識外,還有一些其他的技術和語法需要了解,例如 ES6 和 TypeScript。以下是您可能需要學習的一些基礎知識和對應的學習資源,我…

css中變量和使用變量和運算

變量: 語法:--css變量名:值; --view-theme: #1a99fb; css使用變量: 語法:屬性名:var( --css變量名 ); color: var(--view-theme); css運算: 語法:屬性名…

vue3 rouer params傳參的問題

route.params在頁面刷新的時候數據會丟失,所以vue3 棄用了params方式! 但是,vue3又更新了一個替代params的方式:history API import { useRouter } from "vue-router" const router userRouter; // 跳轉路由&#xff…

JDBC封裝與設計模式

什么是 DAO ? Data Access Object(數據存取對象) 位于業務邏輯和持久化數據之間實現對持久化數據的訪問 DAO起著轉換器的作用,將數據在實體類和數據庫記錄之間進行轉換。 ----------------------------------------------------- DAO模式的組成部分 …

數據結構--拓撲排序

數據結構–拓撲排序 AOV? A O V ? \color{red}AOV? AOV?(Activity On Vertex NetWork&#xff0c;?頂點表示活動的?)&#xff1a; ? D A G 圖 \color{red}DAG圖 DAG圖&#xff08;有向?環圖&#xff09;表示?個?程。頂點表示活動&#xff0c;有向邊 < V i , V j …

計算機網絡的性能指標

計算機網絡的性能指標 1. 速率 速率是指數據在網絡中傳送的速度&#xff0c;通常用比特率或數據率來表示&#xff0c;單位是b/s&#xff0c;或bit/s&#xff0c;即比特每秒&#xff0c;或者bps(bit per second)。 速率單位&#xff1a;1 Ybps 10^24 bps(堯), 1 Zbps 10^21…

python中的lstm:介紹和基本使用方法

python中的lstm&#xff1a;介紹和基本使用方法 未使用插件 LSTM&#xff08;Long Short-Term Memory&#xff09;是一種循環神經網絡&#xff08;RNN&#xff09;的變體&#xff0c;專門用于處理序列數據。LSTM 可以記憶序列中的長期依賴關系&#xff0c;這使得它非常適合于各…

深度思考rpc框架面經之四

7 netty機制的一些理解 推薦閱讀&#xff1a; 深度思考netty網絡編程框架 7.1 Netty支持的端口號: Netty可以綁定到任何合法的端口號&#xff0c;這與大多數網絡庫類似。有效的端口范圍是從0到65535&#xff0c;但通常建議使用1024以上的端口&#xff0c;因為0-1023的端口已…