做教育app的網(wǎng)站蘇州集團(tuán)網(wǎng)站設(shè)計(jì)企業(yè)
鶴壁市浩天電氣有限公司
2026/01/22 10:08:14
做教育app的網(wǎng)站,蘇州集團(tuán)網(wǎng)站設(shè)計(jì)企業(yè),wordpress數(shù)據(jù)庫(kù)類型,江西核工業(yè)建設(shè)有限公司網(wǎng)站前言
在 Python 爬蟲開發(fā)中#xff0c;HTTP 請(qǐng)求是與目標(biāo)網(wǎng)站交互的核心環(huán)節(jié)#xff0c;而requests庫(kù)憑借其簡(jiǎn)潔易用、功能強(qiáng)大的特性#xff0c;成為處理 HTTP 請(qǐng)求的首選工具。相較于 Python 內(nèi)置的urllib庫(kù)#xff0c;requests極大簡(jiǎn)化了請(qǐng)求構(gòu)造、響應(yīng)處理、Cookie 管…前言在 Python 爬蟲開發(fā)中HTTP 請(qǐng)求是與目標(biāo)網(wǎng)站交互的核心環(huán)節(jié)而requests庫(kù)憑借其簡(jiǎn)潔易用、功能強(qiáng)大的特性成為處理 HTTP 請(qǐng)求的首選工具。相較于 Python 內(nèi)置的urllib庫(kù)requests極大簡(jiǎn)化了請(qǐng)求構(gòu)造、響應(yīng)處理、Cookie 管理等操作降低了爬蟲開發(fā)的門檻。本文將深入剖析requests庫(kù)的核心用法重點(diǎn)講解 GET 和 POST 兩種最常用請(qǐng)求方式的實(shí)現(xiàn)原理、參數(shù)配置及實(shí)戰(zhàn)場(chǎng)景幫助開發(fā)者精準(zhǔn)掌握請(qǐng)求發(fā)送的關(guān)鍵技巧解決爬蟲開發(fā)中常見的請(qǐng)求異常問題。摘要本文以「HTTP 測(cè)試工具網(wǎng)站」讀者可直接點(diǎn)擊鏈接進(jìn)行請(qǐng)求測(cè)試為實(shí)戰(zhàn)驗(yàn)證平臺(tái)系統(tǒng)講解requests庫(kù)的安裝與基礎(chǔ)配置詳細(xì)拆解 GET 請(qǐng)求帶參數(shù) / 不帶參數(shù)、請(qǐng)求頭配置和 POST 請(qǐng)求表單數(shù)據(jù)、JSON 數(shù)據(jù)、文件上傳的實(shí)現(xiàn)方式結(jié)合完整代碼案例、輸出結(jié)果及原理分析讓讀者透徹理解不同請(qǐng)求方式的適用場(chǎng)景同時(shí)掌握請(qǐng)求異常處理、Cookie 管理、會(huì)話保持等進(jìn)階技巧為爬蟲開發(fā)中靈活應(yīng)對(duì)各類網(wǎng)站的請(qǐng)求要求奠定基礎(chǔ)。一、requests 庫(kù)基礎(chǔ)認(rèn)知1.1 核心優(yōu)勢(shì)requests庫(kù)是基于 Python 的 HTTP 客戶端庫(kù)遵循 RESTful 設(shè)計(jì)風(fēng)格核心優(yōu)勢(shì)如下語(yǔ)法簡(jiǎn)潔僅需幾行代碼即可完成復(fù)雜 HTTP 請(qǐng)求原生支持 HTTPS、連接池、Cookie、會(huì)話保持等功能完善的異常處理機(jī)制便于排查請(qǐng)求錯(cuò)誤支持多種請(qǐng)求參數(shù)格式表單、JSON、文件等。1.2 安裝與環(huán)境驗(yàn)證安裝命令bash運(yùn)行pip install requests環(huán)境驗(yàn)證代碼python運(yùn)行import requests # 打印庫(kù)版本驗(yàn)證安裝成功 print(requests庫(kù)版本, requests.__version__) # 發(fā)送簡(jiǎn)單GET請(qǐng)求驗(yàn)證可用性 response requests.get(https://httpbin.org/get) print(請(qǐng)求狀態(tài)碼, response.status_code)輸出結(jié)果plaintextrequests庫(kù)版本 2.31.0 請(qǐng)求狀態(tài)碼 200原理說明通過打印庫(kù)版本確認(rèn)安裝成功發(fā)送基礎(chǔ) GET 請(qǐng)求至測(cè)試網(wǎng)站狀態(tài)碼 200 表示請(qǐng)求成功驗(yàn)證requests庫(kù)可正常調(diào)用。二、HTTP 請(qǐng)求核心概念2.1 請(qǐng)求方法分類HTTP 協(xié)議定義了多種請(qǐng)求方法爬蟲開發(fā)中最常用的兩種請(qǐng)求方法核心用途數(shù)據(jù)傳遞方式GET獲取服務(wù)器資源如網(wǎng)頁(yè)、數(shù)據(jù)數(shù)據(jù)拼接在 URL 后查詢參數(shù)POST向服務(wù)器提交數(shù)據(jù)如表單提交數(shù)據(jù)放在請(qǐng)求體中2.2 請(qǐng)求核心參數(shù)無論 GET 還是 POST 請(qǐng)求核心參數(shù)均包含以下幾類url目標(biāo)請(qǐng)求地址headers請(qǐng)求頭模擬瀏覽器、攜帶認(rèn)證信息等params/data/json請(qǐng)求參數(shù)不同格式適配不同場(chǎng)景cookies攜帶 Cookie 信息timeout請(qǐng)求超時(shí)時(shí)間proxies代理 IP 配置。三、GET 請(qǐng)求實(shí)戰(zhàn)詳解3.1 基礎(chǔ) GET 請(qǐng)求無參數(shù)代碼實(shí)現(xiàn)python運(yùn)行import requests # 1. 配置請(qǐng)求頭模擬瀏覽器 headers { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 } # 2. 發(fā)送GET請(qǐng)求 url https://httpbin.org/get response requests.get(url, headersheaders, timeout10) # 3. 響應(yīng)處理 print( 基礎(chǔ)GET請(qǐng)求響應(yīng)結(jié)果 ) print(狀態(tài)碼, response.status_code) print(響應(yīng)頭, response.headers) print(響應(yīng)內(nèi)容JSON格式, response.json())輸出結(jié)果plaintext 基礎(chǔ)GET請(qǐng)求響應(yīng)結(jié)果 狀態(tài)碼 200 響應(yīng)頭 {Date: Wed, 17 Dec 2025 08:00:00 GMT, Content-Type: application/json, Content-Length: 268, Connection: keep-alive, Server: gunicorn/19.9.0, Access-Control-Allow-Origin: *, Access-Control-Allow-Credentials: true} 響應(yīng)內(nèi)容JSON格式 { args: {}, headers: { Accept: */*, Accept-Encoding: gzip, deflate, Host: httpbin.org, User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36, X-Amzn-Trace-Id: Root1-6763a000-1234567890abcdef12345678 }, origin: 123.123.123.123, url: https://httpbin.org/get }原理分析requests.get()方法發(fā)送 GET 請(qǐng)求headers參數(shù)傳遞瀏覽器標(biāo)識(shí)避免被服務(wù)器識(shí)別為爬蟲response.status_code獲取響應(yīng)狀態(tài)碼200 表示請(qǐng)求成功response.headers返回響應(yīng)頭字典包含服務(wù)器類型、內(nèi)容格式等信息response.json()將 JSON 格式的響應(yīng)內(nèi)容解析為 Python 字典簡(jiǎn)化數(shù)據(jù)提取。3.2 帶參數(shù)的 GET 請(qǐng)求場(chǎng)景說明爬取需要篩選條件的頁(yè)面如電商網(wǎng)站按價(jià)格 / 分類篩選商品參數(shù)需拼接在 URL 后格式為url?key1value1key2value2。代碼實(shí)現(xiàn)python運(yùn)行import requests headers { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 } # 定義請(qǐng)求參數(shù) params { name: Python爬蟲, age: 18, page: 1 } # 發(fā)送帶參數(shù)的GET請(qǐng)求 url https://httpbin.org/get response requests.get(url, headersheaders, paramsparams, timeout10) # 響應(yīng)處理 print( 帶參數(shù)GET請(qǐng)求響應(yīng)結(jié)果 ) print(最終請(qǐng)求URL, response.url) print(響應(yīng)內(nèi)容JSON, response.json())輸出結(jié)果plaintext 帶參數(shù)GET請(qǐng)求響應(yīng)結(jié)果 最終請(qǐng)求URL https://httpbin.org/get?namePython%E7%88%AC%E8%99%ABage18page1 響應(yīng)內(nèi)容JSON { args: { age: 18, name: Python爬蟲, page: 1 }, headers: { Accept: */*, Accept-Encoding: gzip, deflate, Host: httpbin.org, User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36, X-Amzn-Trace-Id: Root1-6763a100-1234567890abcdef12345678 }, origin: 123.123.123.123, url: https://httpbin.org/get?namePython%E7%88%AC%E8%99%ABage18page1 }原理分析params參數(shù)接收字典格式的請(qǐng)求參數(shù)requests會(huì)自動(dòng)將其編碼并拼接至 URL 后中文參數(shù)如 “Python 爬蟲”會(huì)被自動(dòng) URL 編碼%E7%88%AC%E8%99%AB避免編碼錯(cuò)誤response.url可查看最終拼接后的 URL便于驗(yàn)證參數(shù)是否正確傳遞。四、POST 請(qǐng)求實(shí)戰(zhàn)詳解4.1 表單格式的 POST 請(qǐng)求場(chǎng)景說明模擬用戶登錄、表單提交等場(chǎng)景數(shù)據(jù)以application/x-www-form-urlencoded格式傳遞網(wǎng)頁(yè)表單默認(rèn)提交格式。代碼實(shí)現(xiàn)python運(yùn)行import requests headers { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36, Content-Type: application/x-www-form-urlencoded # 指定表單格式 } # 定義表單數(shù)據(jù) form_data { username: test_user, password: test_pass123, remember: true } # 發(fā)送POST請(qǐng)求 url https://httpbin.org/post response requests.post(url, headersheaders, dataform_data, timeout10) # 響應(yīng)處理 print( 表單格式POST請(qǐng)求響應(yīng)結(jié)果 ) print(狀態(tài)碼, response.status_code) print(提交的表單數(shù)據(jù), response.json()[form])輸出結(jié)果plaintext 表單格式POST請(qǐng)求響應(yīng)結(jié)果 狀態(tài)碼 200 提交的表單數(shù)據(jù) { password: test_pass123, remember: true, username: test_user }原理分析requests.post()方法發(fā)送 POST 請(qǐng)求data參數(shù)傳遞表單數(shù)據(jù)字典格式Content-Type請(qǐng)求頭指定數(shù)據(jù)格式為表單確保服務(wù)器正確解析響應(yīng)結(jié)果中form字段對(duì)應(yīng)提交的表單數(shù)據(jù)驗(yàn)證數(shù)據(jù)已成功傳遞。4.2 JSON 格式的 POST 請(qǐng)求場(chǎng)景說明對(duì)接 RESTful API 接口時(shí)數(shù)據(jù)通常以 JSON 格式傳遞application/json如爬取接口返回的結(jié)構(gòu)化數(shù)據(jù)。代碼實(shí)現(xiàn)python運(yùn)行import requests headers { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36, Content-Type: application/json # 指定JSON格式 } # 定義JSON數(shù)據(jù) json_data { user_info: { id: 1001, name: 爬蟲開發(fā)者, skills: [Python, requests, BeautifulSoup] }, action: query } # 發(fā)送JSON格式POST請(qǐng)求 url https://httpbin.org/post response requests.post(url, headersheaders, jsonjson_data, timeout10) # 響應(yīng)處理 print( JSON格式POST請(qǐng)求響應(yīng)結(jié)果 ) print(提交的JSON數(shù)據(jù), response.json()[json])輸出結(jié)果plaintext JSON格式POST請(qǐng)求響應(yīng)結(jié)果 提交的JSON數(shù)據(jù) { action: query, user_info: { id: 1001, name: 爬蟲開發(fā)者, skills: [ Python, requests, BeautifulSoup ] } }原理分析json參數(shù)接收 Python 字典requests會(huì)自動(dòng)將其序列化為 JSON 字符串并設(shè)置Content-Type為application/json即使手動(dòng)指定也會(huì)覆蓋相較于datajson.dumps(json_data)json參數(shù)更簡(jiǎn)潔無需手動(dòng)序列化。4.3 文件上傳的 POST 請(qǐng)求場(chǎng)景說明模擬文件上傳場(chǎng)景如爬蟲需上傳文件后獲取數(shù)據(jù)requests支持多文件上傳。代碼實(shí)現(xiàn)python運(yùn)行import requests headers { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 } # 構(gòu)造文件數(shù)據(jù)需提前創(chuàng)建test.txt文件 files { file1: (test.txt, open(test.txt, rb), text/plain) # 文件名、文件對(duì)象、文件類型 } # 發(fā)送文件上傳POST請(qǐng)求 url https://httpbin.org/post response requests.post(url, headersheaders, filesfiles, timeout10) # 響應(yīng)處理 print( 文件上傳POST請(qǐng)求響應(yīng)結(jié)果 ) print(上傳的文件信息, response.json()[files]) # 關(guān)閉文件對(duì)象 files[file1][1].close()輸出結(jié)果test.txt 內(nèi)容為 “Python requests 實(shí)戰(zhàn)”plaintext 文件上傳POST請(qǐng)求響應(yīng)結(jié)果 上傳的文件信息 { file1: Python requests 實(shí)戰(zhàn) }原理分析files參數(shù)接收字典鍵為表單字段名值為元組文件名、文件二進(jìn)制對(duì)象、文件 MIME 類型需以rb模式打開文件確保二進(jìn)制傳輸上傳完成后需關(guān)閉文件對(duì)象避免資源泄露。五、requests 進(jìn)階技巧5.1 會(huì)話保持Session場(chǎng)景說明爬取需要登錄后訪問的頁(yè)面使用Session可保持 Cookie避免重復(fù)登錄。代碼實(shí)現(xiàn)python運(yùn)行import requests # 創(chuàng)建會(huì)話對(duì)象 session requests.Session() headers { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 } # 第一步登錄模擬提交登錄表單 login_url https://httpbin.org/post login_data {username: test, password: 123456} session.post(login_url, headersheaders, datalogin_data) # 第二步訪問需要登錄的頁(yè)面會(huì)話保持Cookie target_url https://httpbin.org/cookies response session.get(target_url, headersheaders) print( 會(huì)話保持響應(yīng)結(jié)果 ) print(當(dāng)前Cookie, response.json()[cookies]) # 關(guān)閉會(huì)話 session.close()原理分析Session對(duì)象會(huì)自動(dòng)保存請(qǐng)求過程中的 Cookie后續(xù)請(qǐng)求自動(dòng)攜帶相較于多次調(diào)用requests.get()/post()Session減少 TCP 連接建立次數(shù)提升請(qǐng)求效率。5.2 異常處理代碼實(shí)現(xiàn)通用異常捕獲python運(yùn)行import requests from requests.exceptions import RequestException, HTTPError, Timeout, ConnectionError def send_request(url, methodGET, dataNone, jsonNone): headers { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 } try: if method.upper() GET: response requests.get(url, headersheaders, timeout10) elif method.upper() POST: response requests.post(url, headersheaders, datadata, jsonjson, timeout10) else: raise ValueError(不支持的請(qǐng)求方法) response.raise_for_status() # 拋出HTTP錯(cuò)誤4xx/5xx return response except HTTPError as e: print(fHTTP錯(cuò)誤{e.response.status_code} - {e}) except Timeout as e: print(f請(qǐng)求超時(shí){e}) except ConnectionError as e: print(f連接錯(cuò)誤{e}) except RequestException as e: print(f請(qǐng)求異常{e}) except Exception as e: print(f未知異常{e}) return None # 測(cè)試異常處理 response send_request(https://httpbin.org/status/404, methodGET)輸出結(jié)果plaintextHTTP錯(cuò)誤404 - 404 Client Error: NOT FOUND for url: https://httpbin.org/status/404原理分析捕獲requests庫(kù)特定異常HTTPError/Timeout/ConnectionError精準(zhǔn)定位問題response.raise_for_status()主動(dòng)觸發(fā) HTTP 錯(cuò)誤異常避免忽略 4xx/5xx 狀態(tài)碼通用RequestException捕獲所有請(qǐng)求相關(guān)異常兜底處理。六、常見問題與解決方案問題現(xiàn)象原因分析解決方案請(qǐng)求返回 403 Forbidden無請(qǐng)求頭 / 請(qǐng)求頭不完整配置完整的 User-Agent必要時(shí)添加 Referer、Accept 等請(qǐng)求頭JSON 解析失敗響應(yīng)內(nèi)容非 JSON 格式先通過response.text查看響應(yīng)內(nèi)容確認(rèn)格式后再選擇解析方式中文參數(shù)亂碼手動(dòng)拼接 URL 未編碼使用params參數(shù)自動(dòng)編碼或手動(dòng)調(diào)用urllib.parse.quote()編碼中文文件上傳失敗文件路徑錯(cuò)誤 / 文件未以 rb 打開檢查文件路徑確保以二進(jìn)制模式打開文件會(huì)話保持失效Cookie 未正確保存使用Session對(duì)象統(tǒng)一管理請(qǐng)求避免多次創(chuàng)建新的 Session七、總結(jié)本文系統(tǒng)講解了requests庫(kù)的核心用法從基礎(chǔ)的 GET/POST 請(qǐng)求發(fā)送到表單、JSON、文件等不同參數(shù)格式的傳遞再到會(huì)話保持、異常處理等進(jìn)階技巧結(jié)合實(shí)戰(zhàn)案例和原理分析全面覆蓋了爬蟲開發(fā)中 HTTP 請(qǐng)求的關(guān)鍵場(chǎng)景。requests庫(kù)的核心價(jià)值在于簡(jiǎn)化 HTTP 請(qǐng)求的開發(fā)復(fù)雜度開發(fā)者無需關(guān)注底層的 TCP 連接、數(shù)據(jù)編碼等細(xì)節(jié)只需聚焦業(yè)務(wù)邏輯即可。在實(shí)際爬蟲開發(fā)中需根據(jù)目標(biāo)網(wǎng)站的請(qǐng)求方式可通過瀏覽器開發(fā)者工具的 Network 面板分析選擇對(duì)應(yīng)的請(qǐng)求方法合理配置請(qǐng)求頭和參數(shù)同時(shí)做好異常處理和合規(guī)控制如控制請(qǐng)求頻率、遵守 robots 協(xié)議。掌握requests庫(kù)是 Python 爬蟲開發(fā)的基礎(chǔ)后續(xù)結(jié)合 BeautifulSoup、XPath 等解析工具即可完成從請(qǐng)求發(fā)送到數(shù)據(jù)提取的完整爬蟲流程。下一篇文章將重點(diǎn)講解 BeautifulSoup 庫(kù)的 HTML 解析技巧進(jìn)一步完善爬蟲開發(fā)的核心技能體系。