[爬蟲知識] http協議

相關爬蟲專欄:JS逆向爬蟲實戰??爬蟲知識點合集??爬蟲實戰案例


引言:爬蟲與HTTP的不解之緣

  • 爬蟲作用:模擬瀏覽器請求網頁
  • 為何要懂HTTP:http是網絡通信的基石,爬蟲抓取數據就是通過HTTP協議進行的,了解http有助于我們更好的構筑爬蟲,解決問題。

一、什么是HTTP協議

  • HTTP (HyperText Transfer Protocol) 超文本傳輸協議,是互聯網上應用最為廣泛的一種網絡協議。所有 WWW 文件都必須遵守這個標準。
  • 特點:
    • 客戶端-服務器端間建立通訊連接:請求-響應
    • 無狀態:每次請求獨立,服務器不保留連接狀態(需要cookie/session來保存信息)
    • 靈活簡單:支持多種數據類型。

二、請求與響應機制

1. 客戶端發送請求:

  • 請求行
    • 請求方法 (Method): GET、POST、PUT、DELETE、HEAD、OPTIONS 等,重點講解爬蟲常用的 GETPOST
    • 請求 URL (Uniform Resource Locator): 要訪問的資源路徑。
    • HTTP 版本: 如 HTTP/1.1,HTTP/2.0。
  • 請求頭
    • User-Agent: 標識客戶端類型,爬蟲偽裝瀏覽器最常用的頭信息。
    • Referer: 防盜鏈,此條請求的來源頁面。
    • Cookie: 保持會話狀態的關鍵。
    • Host: 目標服務器的主機名。
    • Accept: 客戶端可接受的媒體類型。
    • Accept-Encoding: 客戶端接受的編碼方式(如 gzip, deflate)。
    • Connection: 連接狀態(如 Keep-Alive)。
    • Content-Type: 請求體的數據類型和長度,常用來檢查數據是json型還是text型。
    • 自定義請求頭: 爬蟲中可能添加的自定義頭。
  • 請求體
    • 主要用于POST請求,攜帶提交的數據(表單數據,JSON數據等)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? --? 載荷中寫著請求載荷/表單數據

2. 服務器端返回響應:

  • 狀態行
    • HTTP 版本。
    • 狀態碼 (Status Code):
      • 2xx (成功):200 OK (最常見)。
      • 3xx (重定向--即跳轉訪問到另一個頁面):301 (永久), 302 (臨時), 304 (未修改)。
      • 4xx (客戶端錯誤):400 (請求錯誤), 403 (禁止訪問), 404 (未找到)。
      • 5xx (服務器錯誤):500 (內部錯誤), 502 (網關錯誤)。
    • 狀態信息: 對狀態碼的文字描述。
  • 響應頭
    • Set-Cookie: 服務器設置 Cookie 給客戶端。
    • Location: 重定向 URL。
    • Server: 服務器軟件信息。
    • Content-Type: 響應體的數據類型(如 text/html, application/json)。
    • Content-Length: 響應體的長度。
    • Vary 告知緩存機制哪些請求頭會影響響應。
  • 響應體
    • 實際返回的數據,如 HTML、JSON、圖片等。

三、HTTP協議與反爬機制的攻防戰

在爬蟲上,HTTP協議不光是信息傳輸的通道,更是爬蟲與反爬雙方攻防的主戰場。網站會通過檢查HTTP請求各個訪問信息來確定其是正常或爬蟲訪問。而理解這些反爬策略與HTTP的關系就成了我們學習進階爬蟲的必修課。

1. 身份識別:User-Agent與Referer的偽裝

UA與Referer是常見的請求頭中檢查的對象:前者為身份識別,后者為防盜鏈(訪問該請求前是從哪個鏈接跳轉過來的)

二者處理都是設置一個合法真實的對象即可。其中UA在遭遇更高級別的反爬檢查時,可能需要備一個UA池。

2. 會話保持:Cookie/Seesion的設置

HTTP 協議本身是無狀態的,這意味著服務器不會記住每次請求之間的信息。但為了實現用戶登錄、購物車、個性化推薦等功能,網站會使用 Cookie 和 Session 來維持會話狀態。

詳情了解見爬蟲知識之Cookie與Session。通過requests.session的方式可以有效管理相關會話并規避吸納檢測請求頻率的反爬。

3. 訪問頻率限制:IP限制與HTTP頻率限制

網站為了防止服務器過載/資源濫用,一般會限制同IP/同用戶的請求數量。

  • IP限制:服務器記錄當前請求的IP地址,如果短時間訪問量過大,就會暫時或永久封禁該ip。
  • HTTP請求頻率限制:不僅ip,也有可能看用戶id,cookie等分析來限制。
    • 爬蟲應對方法:
      • 延時:每次請求時加一個固定或隨機的的延時(time.sleep),模擬人類瀏覽行為,降低請求頻率。
      • 代理IP池:使用大量的代理IP地址,分散請求來源,避免單一IP封禁。適用于大型爬蟲項目。
      • 分布式爬蟲:利用多臺機器與多個IP同時爬取,進一步分散請求壓力。

四、總結

HTTP協議的特性與爬蟲緊密相關,對HTTP協議了解足夠深入,能更有效的幫助我們爬取各個網站內容。

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

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

相關文章

《Spark/Flink/Doris離線實時數倉開發》目錄

歡迎加入《Spark/Flink/Doris離線&實時數倉開發》付費專欄!本專欄專為大數據工程師、數據分析師及準備大數據面試的求職者量身打造,聚焦Spark、Flink、Doris等核心技術,覆蓋離線與實時數倉開發的全流程。無論你是想快速上手項目、提升技術…

事務基礎概念

事務 事務是什么? 事務是一種機制,一個操作序列,包含了一組數據庫操作命令,并且把所有命令作為一個整體一起向系統提交或者撤銷操作請求,即統一這組命令要么一起執行,要么一起不執行 簡短概況就是&#…

四、【API 開發篇 (上)】:使用 Django REST Framework 構建項目與模塊 CRUD API

【API 開發篇 】:使用 Django REST Framework 構建項目與模塊 CRUD API 前言為什么選擇 Django REST Framework (DRF)?第一步:創建 Serializers (序列化器)第二步:創建 ViewSets (視圖集)第三步:配置 URLs (路由)第四步…

【北京盈達科技】GEO優化中的多模態了解

多模態數據處理領域,“模態”指的是不同類型的數據形式,每種模態都具有獨特的結構和信息表達方式。以下是12種可能的模態類型,這些模態在實際應用中可以根據具體場景進行組合和處理: 1. 文本模態 描述:以文字形式存在…

推進可解釋人工智能邁向類人智能討論總結分享

目錄 一、探索“可解釋人工智能”:AI如何從“黑箱”走向“透明大師” 二、走進可解釋人工智能:讓AI的決策變得透明 (一)幾種常見的特征導向方法 (二)像素級方法 1. 層次相關傳播(LRP&#…

【Qt】Qt 5.9.7使用MSVC2015 64Bit編譯器

環境 Qt版本:5.9.7 VS版本:VS2022 步驟 1、安裝VS2022 三個必選項: a、使用C的桌面開發 b、Windows10 SDK 版本:10.0.18362.0 c、MSVC v140 VS 2015 生成工具 Windows10 SDK安裝完成后,需要增加安裝調試器。 2…

超越OpenAI CodeX的軟件工程智能體:Jules

目前AI編碼代理(coding agent)領域正迅速崛起,Google推出了一款名為Jules的非同步編碼代理(asynchronous coding agent),主要針對專業開發者,與傳統在開發環境中直接輔助編碼的Cursor或Windsurf…

springboot使用xdoc-report包導出word

背景:項目需要使用xdoc-report.jar根據設置好的word模版,自動填入數據 導出word 框架使用 我的需求是我做一個模板然后往里面填充內容就導出我想要的word文件,問了下chatgpt還有百度,最后選用了xdocreport這個框架,主…

CodeBuddy實現pdf批量加密

本文所使用的 CodeBuddy 免費下載鏈接:騰訊云代碼助手 CodeBuddy - AI 時代的智能編程伙伴 前言 在信息爆炸的時代,PDF 格式因其跨平臺性和格式穩定性,成為辦公、學術、商業等領域傳遞信息的重要載體。從機密合同到個人隱私文檔&#xff0c…

如何在PyCharm2025中設置conda的多個Python版本

前言 體驗的最新版本的PyCharm(Community)2025.1.1,發現和以前的版本有所不同。特別是使用Anaconda中的多個版本的Python的時候。 關于基于Anaconda中多個Python版本的使用,以及對應的Pycharm(2023版)的使用,可以參考…

STM32F103 HAL多實例通用USART驅動 - 高效DMA+RingBuffer方案,量產級工程模板

導言 《STM32F103_LL庫寄存器學習筆記12.2 - 串口DMA高效收發實戰2:進一步提高串口接收的效率》前陣子完成的LL庫與寄存器版本的代碼,有一個明顯的缺點是不支持多實例化。最近,計劃基于HAL庫系統地梳理一遍bootloader程序開發。在bootloader程…

【數據結構】棧和隊列(上)

目錄 一、棧(先進后出、后進先出的線性表) 1、棧的概念及結構 2、棧的底層結構分析 二、代碼實現 1、定義一個棧 2、棧的初始化 3、入棧 3、增容 4、出棧 5、取棧頂 6、銷毀棧 一、棧(先進后出、后進先出的線性表) 1、…

Vue 3 官方 Hooks 的用法與實現原理

Vue 3 引入了 Composition API,使得生命周期鉤子(hooks)在函數式風格中更清晰地表達。本篇文章將從官方 hooks 的使用、實現原理以及自定義 hooks 的結構化思路出發,全面理解 Vue 3 的 hooks 系統。 📘 1. Vue 3 官方生…

大語言模型 17 - MCP Model Context Protocol 介紹對比分析 基本環境配置

MCP 基本介紹 官方地址: https://modelcontextprotocol.io/introduction “MCP 是一種開放協議,旨在標準化應用程序向大型語言模型(LLM)提供上下文的方式。可以把 MCP 想象成 AI 應用程序的 USB-C 接口。就像 USB-C 提供了一種…

云原生安全之PaaS:從基礎到實踐的技術指南

??「炎碼工坊」技術彈藥已裝填! 點擊關注 → 解鎖工業級干貨【工具實測|項目避坑|源碼燃燒指南】 云原生安全之PaaS:從基礎到實踐的技術指南 一、基礎概念 PaaS(Platform as a Service)平臺 PaaS是一種云計算服務模型,為開發者提供應用程序的開發、部署和運行環境,涵…

Chrome中http被強轉成https問題

原因:2023年11月1日,chrome發布HTTPS-Upgrades功能,在用戶訪問 http:// 的舊鏈接之后,會自動嘗試跳轉到通過加密的 https:// 協議,訪問該網站。且探測到 https 服務存在也會自動改成 https。 親測兩種方案可行&#x…

Linux 操作文本文件列數據的常用命令

文章目錄 Linux 操作文本文件列數據的常用命令基本列處理命令高級列處理列數據轉換和排序列數據統計和分析 Linux 操作文本文件列數據的常用命令 Linux 提供了多種強大的命令來處理文本文件中的列數據,以下是一些最常用的命令和工具: 基本列處理命令 c…

如何理解線性判別分析(LDA)算法?

在高維數據空間中,特征變量呈指數級增長,信息分布密集且復雜。研究者在面對海量特征時,仿佛置身于一幅結構高度抽象且維度交織的多變量圖景之中,其解析與建模猶如在一幅復雜的數據宇宙圖譜中導航,既需理論框架的指引,也依賴于算法工具的精確刻畫。如何從眾多維度中篩選出…

鴻蒙UI開發——Builder函數的封裝

1、問題引入 我們在開發中可能會遇到這樣一個問題:將一個Builder修飾后的函數用變量或者數組記錄下來,在業務其他地方使用這些Builder函數。 舉個例子,有下面一段代碼: Builderfunction builderElement() {}let builderArr: Fu…

ARM筆記-ARM指令集

第三章 ARM指令集 3.1 ARM指令集簡介 ARM微處理器的ARM指令集 ,所有的指令長度都是32位 ,并且大多數指令都在一個單獨指令周期內執行。 主要特點: 指令是條件執行的ARM微處理器的指令集是加載/存儲型的在多寄存器操作指令中一次最多可以完成…