一、會話(Session)
(一)核心邏輯
HTTP 本身無記憶,每次請求獨立。會話(Session)?就是為解決這問題,讓客戶端(瀏覽器)和服務器 “記住” 交互狀態(比如登錄態 ),常用?Cookie
?實現:服務器發?Cookie
?給客戶端存著,下次請求帶著,服務器就知道 “是同一用戶” 。
(二)創建會話(requests 實現 )
用?requests
?庫的?Session
?類,自動維持會話、管理?Cookie
,代碼形式:
import requests
# 創建會話對象,后續用 s 發請求,自動帶 Cookie
s = requests.Session()
比如登錄操作,先用?s.post()
?提交賬號密碼,登錄后的?Cookie
?會存在?s
?里,再用?s.get()
?訪問需要登錄的頁面,就自動帶著登錄態,不用手動傳?Cookie
?。
二、代理服務器
(一)是什么 & 作用
代理服務器是客戶端和目標服務器中間的 “中轉站”?。客戶端發請求給代理,代理再轉發給目標服務器,拿到響應后再回傳給客戶端。
作用超關鍵:
- 防封禁:頻繁爬取時,目標服務器會封客戶端 IP ,用代理換 IP ,讓服務器以為是不同用戶請求。
- 突破限制:有些資源限制訪問來源,代理可偽裝成允許的 IP 去請求。
(二)工作流程(對應圖文 )
- 客戶端(你寫的爬蟲)→ 發 URL 請求給代理服務器?。
- 代理服務器 → 轉發請求給目標服務器?。
- 目標服務器 → 把響應給代理服務器?。
- 代理服務器 → 再把響應回傳給客戶端?。
相當于代理 “替你” 和目標服務器溝通,隱藏真實 IP 。
(三)使用方法(requests 代碼 )
在?get()
/post()
?里加?proxies
?參數,傳代理的 IP 等信息,代碼形式:
import requests
# 構造代理字典,http/https 按需選,值是代理地址(IP:端口 )
proxy = {'http': '代理服務器地址:端口'}
# 請求時傳 proxies,走代理訪問目標網址
r = requests.get('https://www.xxx.com/', proxies=proxy)
print(r.text)
比如代理地址是?115.29.199.168:1188
?,就寫成?proxy = {'http': '115.29.199.168:1188'}
?,請求時帶著它,數據就會走代理服務器轉發 。
注意:免費代理有時效性,可能用著用著就失效,實際項目常用付費、穩定的代理~
這樣,會話維持(靠?Session
?自動管?Cookie
?)和代理服務器(當 “中轉站” 防封禁 )的核心就講清楚啦,代碼怎么寫、作用是啥,都能快速 get !
?