ConnectionResetError(10054, ‘遠程主機強迫關閉了一個現有的連接,Python爬蟲

文章目錄

  • ConnectionResetError(10054, '遠程主機強迫關閉了一個現有的連接
    • 1.問題描述
    • 2.嘗試的解決方法(均未生效)
      • 2.1 請求重試機制
      • 2.2 模擬瀏覽器請求頭
      • 2.3 關閉連接資源
      • 2.4 延遲訪問
    • 3.解決方案:使用 proxy_pool IP 代理池
    • 最后
    • 參考文章

ConnectionResetError(10054, '遠程主機強迫關閉了一個現有的連接

1.問題描述

在進行爬蟲開發時,頻繁遇到以下報錯:

Connection aborted: ConnectionResetError(10054, '遠程主機強迫關閉了一個現有的連接。')

這是由于目標服務器將爬蟲行為識別為異常或惡意訪問,觸發了安全機制(如防火墻、WAF),從而強制關閉連接。

2.嘗試的解決方法(均未生效)

2.1 請求重試機制

requests.get(url) 添加重試邏輯,如失敗最多嘗試 20 次。

for i in range(20):try:response = requests.get(url)breakexcept Exception as e:time.sleep(1)

2.2 模擬瀏覽器請求頭

在請求中添加常見的 headers,如 User-AgentRefererAccept-Language 等。

headers = {'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36',"Accept-Language": "zh-CN,zh;q=0.9"}

2.3 關閉連接資源

在請求后調用 response.close() 主動釋放連接資源,防止連接堆積。

2.4 延遲訪問

控制訪問頻率,如通過 time.sleep() 降低請求頻率,依舊無效。

3.解決方案:使用 proxy_pool IP 代理池

最終通過引入 IP 代理池 解決了問題,避免了目標服務器根據 IP 頻率封鎖爬蟲請求。

  • GitHub 地址:https://github.com/jhao104/proxy_pool
  • 項目名稱:proxy_pool

配置步驟:

1、克隆項目并安裝依賴

git clone https://github.com/jhao104/proxy_pool.git
cd proxy_pool
pip install -r requirements.txt

2、Redis本地配置一下

在這里插入圖片描述

3、啟動代理池服務

# 啟動調度程序
python proxyPool.py schedule# 啟動webApi服務     
python proxyPool.py server

4、代碼中應用

封裝兩個功能,分別是獲取IP和刪除池子中的IP。

# proxypool ip池代理
PROXY_POOL_URL = "http://127.0.0.1:5010/get/"
def get_proxy():try:return requests.get("http://127.0.0.1:5010/get/").json().get("proxy")except Exception as e:print(f"[代理獲取失敗] {repr(e)}")return None
def delete_proxy(proxy):try:requests.get(f"http://127.0.0.1:5010/delete/?proxy={proxy}")except Exception as e:print(f"[代理刪除失敗] {repr(e)}")

實際應用,解決獲取問題(代碼僅保留邏輯信息,相關私密數據不保留):

def down_img(img_url, retry_count=30):ext = os.path.splitext(parse.urlparse(img_url).path)[1].lower().lstrip(".")if ext not in ["jpg", "jpeg", "png", "gif", "svg", "webp"]:ext = "jpg"image_dir = os.path.join(current_dir, "x", "x", "x", "x")os.makedirs(image_dir, exist_ok=True)image_name = (f"xxx")image_path = os.path.join(image_dir, image_name)while retry_count > 0:proxy = get_proxy() # 1.獲取proxy ipif not proxy:print("Error:無可用代理,無法下載")return Noneproxies = {"http": f"http://{proxy}", "https": f"http://{proxy}"}try:with requests.get(img_url, proxies=proxies, timeout=10, stream=True) as response: # 2.獲取鏈接相關數據response.raise_for_status()with open(image_path, "wb") as f: # 3.圖片本地化for chunk in response.iter_content(chunk_size=8192):f.write(chunk)print(f"[成功] 下載圖片到:{image_path}")return xxxxexcept Exception as e:retry_count -= 1delete_proxy(proxy)print(f"[最終失敗] 無法下載圖片:{img_url}")

實現成果:redis proxy_pool ip 存儲 和 終端完成打印

在這里插入圖片描述

在這里插入圖片描述
Successful! 成功解決問題。

最后

  • 該類連接被重置的錯誤,單純通過重試、偽裝 UA 或請求頭等手段已不足以繞過限制。
  • 使用高質量的 IP 代理池最有效,配合隨機代理策略可提高爬蟲的穩定性和成功率。

參考文章

1、https://blog.csdn.net/xunxue1523/article/details/104662965

2、https://www.cnblogs.com/AubeLiang/p/17756844.html

3、https://github.com/jhao104/proxy_pool

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

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

相關文章

Redis相關命令詳解與原理(一)

目錄 Redis是什么? Redis 的特點和功能 Redis工作模式 與MySQL的區別 安裝編譯和啟動 redis的value類型編碼 string類型 基礎命令 應用 1.對象存儲 2.累加器 3.分布式鎖 4.位運算 list類型 基礎命令 應用 1.棧(先進后出 FILO&#xff0…

Starrocks 的 ShortCircuit短路徑

背景 本文基于 Starrocks 3.3.5 本文主要來探索一下Starrocks在FE端怎么實現 短路徑,從而加速點查查詢速度。 在用戶層級需要設置 enable_short_circuit 為true 分析 數據流: 直接到StatementPlanner.createQueryPlan方法: ... OptExpres…

Oracle非歸檔模式遇到文件損壞怎么辦?

昨天夜里基地夜班的兄弟,打電話說有個報表庫連不上了,趕緊起來連上VPN查看一下,看到實例宕機了,先趕緊startup起來。 1.查看報錯信息 環境介紹:Redhat 6.9 Oracle 11.2.0.4 No Archive Mode 查看alert log 關鍵報…

關于一些平時操作系統或者軟件的步驟轉載

關于一些平時操作系統或者軟件的步驟轉載 關于python環境搭建 關于Ubuntu 1. 雙系統之Ubuntu快速卸載 2. VMware安裝Ubuntu虛擬機實現COpenCV代碼在虛擬機下運行教程 3. ubuntu 下 opencv的安裝以及配置(親測有效) 4. Ubuntu將c編譯成.so文件并測試 5…

hz2新建Keyword頁面

新建一個single-keywords.php即可,需要篩選項再建taxonomy-knowledge-category.php 參考:https://www.tkwlkj.com/customize-wordpress-category-pages.html WordPress中使用了ACF創建了自定義產品分類products,現在想實現自定義產品分類下的…

VRRP協議-IP地址冗余配置

有兩個服務器172.16.42.1和172.16.42.121,通過VRRP協議使兩臺設備共用一個虛擬地址172.16.42.100,當 172.16.42.1 可用時,它會作為主路由器使用虛擬 IP 地址;當它不可用時,172.16.42.121 會接管虛擬 IP 地址&#xff0…

21、DeepSeekMath論文筆記(GRPO)

DeepSeekMath論文筆記 0、研究背景與目標1、GRPO結構GRPO結構PPO知識點**1. PPO的網絡模型結構****2. GAE(廣義優勢估計)原理****1. 優勢函數的定義**2.GAE(廣義優勢估計) 2、關鍵技術與方法3、核心實驗結果4、結論與未來方向關鍵…

卡爾曼濾波算法(C語言)

此處感謝華南虎和互聯網的眾多大佬的無償分享。 入門常識 先簡單了解以下概念:疊加性,齊次性。 用大白話講,疊加性:多個輸入對輸出有影響。齊次性:輸入放大多少倍,輸出也跟著放大多少倍 卡爾曼濾波符合這…

SolidWork-2023 鼠標工程

地址 https://github.com/MartinxMax/SW2023-Project/tree/main/mouse 鼠標

vue 組件函數式調用實戰:以身份驗證彈窗為例

通常我們在 Vue 中使用組件&#xff0c;是像這樣在模板中寫標簽&#xff1a; <MyComponent :prop"value" event"handleEvent" />而函數式調用&#xff0c;則是讓我們像調用一個普通 JavaScript 函數一樣來使用這個組件&#xff0c;例如&#xff1a;…

Vite Proxy配置詳解:從入門到實戰應用

Vite Proxy配置詳解&#xff1a;從入門到實戰應用 一、什么是Proxy代理&#xff1f; Proxy&#xff08;代理&#xff09;是開發中常用的解決跨域問題的方案。Vite內置了基于http-proxy的代理功能&#xff0c;可以輕松配置API請求轉發。 二、基礎配置 在vite.config.js中配置…

圖像畫質算法記錄(前言)

一、背景介紹 本篇主要是對圖像畫質增強相關&#xff0c;進行簡單整理和記錄。 二、整體流程 整體效果主要受到兩部分影響&#xff1a; 1、前端isp處理。 2、后端畫質增強。 三、isp常規流程 可以參考&#xff1a;劉斯寧&#xff1a;Understanding ISP Pipeline 四、后端畫質…

Qt 中信號與槽(signal-slot)機制支持 多種連接方式(ConnectionType)

Qt 中信號與槽&#xff08;signal-slot&#xff09;機制支持 多種連接方式&#xff08;ConnectionType&#xff09; Qt 中信號與槽&#xff08;signal-slot&#xff09;機制支持 多種連接方式&#xff08;ConnectionType&#xff09;&#xff0c;用于控制信號發出后如何調用槽…

卷積神經網絡實戰(4)代碼詳解

目錄 一、導包 二、數據準備 1.數據集 2. 標準化轉換(Normalize) 3.設置dataloader 三、定義模型 四、可視化計算圖&#xff08;不重要&#xff09; 五、評估函數 六、Tensorboard 一、導包 import matplotlib as mpl import matplotlib.pyplot as plt %matplotlib i…

深入解析進程地址空間:從虛擬到物理的奇妙之旅

深入解析進程地址空間&#xff1a;從虛擬到物理的奇妙之旅 前言 各位小伙伴&#xff0c;還記得我們之前探討的 fork 函數嗎&#xff1f;當它返回兩次時&#xff0c;父子進程中同名變量卻擁有不同值的現象&#xff0c;曾讓我們驚嘆于進程獨立性與寫時拷貝的精妙設計。但你是否…

opencv處理圖像(二)

接下來進入到程序線程設計部分 我們主線程負責圖形渲染等操作&#xff0c;OpenGL的限制&#xff0c;opencv技術對傳入圖像加以處理&#xff0c;輸出預期圖像給主線程 QThread 我之前也是在想給opencv開一個專門的線程&#xff0c;但經過了解有幾個弊端&#xff0c;第一資源浪…

學習threejs,使用Physijs物理引擎

&#x1f468;??? 主頁&#xff1a; gis分享者 &#x1f468;??? 感謝各位大佬 點贊&#x1f44d; 收藏? 留言&#x1f4dd; 加關注?! &#x1f468;??? 收錄于專欄&#xff1a;threejs gis工程師 文章目錄 一、&#x1f340;前言1.1 ??Physijs 物理引擎1.1.1 ??…

ARCGIS PRO DSK 選擇坐標系控件(CoordinateSystemsControl )的調用

在WPF窗體上使用 xml&#xff1a;加入空間命名引用 xmlns:mapping"clr-namespace:ArcGIS.Desktop.Mapping.Controls;assemblyArcGIS.Desktop.Mapping" 在控件區域加入&#xff1a; <mapping:CoordinateSystemsControl x:Name"CoordinateSystemsControl&q…

LangGraph(三)——添加記憶

目錄 1. 創建MemorySaver檢查指針2. 構建并編譯Graph3. 與聊天機器人互動4. 問一個后續問題5. 檢查State參考 1. 創建MemorySaver檢查指針 創建MemorySaver檢查指針&#xff1a; from langgraph.checkpoint.memory import MemorySavermemory MemorySaver()這是位于內存中的檢…

深入理解Mysql

BufferPool和Changebuffer是如何加快讀寫速度的? BufferPool 在Mysql啟動的時候 Mysql會申請連續的空間來存儲BufferPool 每個頁16kb 當控制塊不足以存儲信息的時候就會向后申請一個新的頁 每個控制塊都對應了一個緩存頁 控制塊占chunk的百分之5左右 LRU鏈表 Changebuffer …