Python爬蟲IP代理池的建立和使用

寫在前面

建立Python爬蟲IP代理池可以提高爬蟲的穩定性和效率,可以有效避免IP被封鎖或限制訪問等問題。

?

下面是建立Python爬蟲IP代理池的詳細步驟和代碼實現:

1. 獲取代理IP

我們可以從一些代理IP網站上獲取免費或付費的代理IP,或者自己租用代理IP服務。這里我們以站大爺代理為例,獲取前10頁的HTTP代理IP地址。

import requests
from scrapy.selector import Selectordef get_proxy_ips():proxy_ips = []for i in range(1, 11):url = 'https://www.zdaye.com/free/'.format(i)headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}res = requests.get(url, headers=headers)selector = Selector(text=res.text)trs = selector.css('#ip_list tr')for tr in trs[1:]:ip = tr.css('td:nth-child(2)::text').extract_first()port = tr.css('td:nth-child(3)::text').extract_first()proxy_ips.append('{}:{}'.format(ip, port))return proxy_ips
2. 檢測代理IP的可用性

獲取到代理IP后,需要對其進行可用性的檢測,篩選出可用性較高的IP地址。這里我們測試以百度為目標網站檢測HTTP代理IP地址的可用性,如果響應碼為200,則表明該IP地址可用。

import requestsdef check_proxy_ip(ip):url = 'http://www.baidu.com'headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}proxies = {'http': 'http://' + ip, 'https': 'https://' + ip}try:res = requests.get(url, headers=headers, proxies=proxies, timeout=10)if res.status_code == 200:return Trueelse:return Falseexcept:return False
3. 將可用的代理IP存儲到池中

將可用的代理IP存儲到一個IP池中,根據需要可以設置IP池的容量和存儲時間。這里我們將可用的IP地址存儲到redis數據庫中。

import redisdef save_proxy_ips():proxy_ips = get_proxy_ips()pool = redis.ConnectionPool(host='localhost', port=6379, db=0)r = redis.Redis(connection_pool=pool)for ip in proxy_ips:if check_proxy_ip(ip):r.sadd('proxy_ip_pool', ip)
4. 在爬蟲程序中使用代理IP池

在爬蟲程序中設置代理IP池,并在請求時隨機選擇一個可用的代理IP地址進行訪問。這里我們使用requests庫和random模塊實現。

import requests
import redis
import randomdef get_my_ip():url = 'http://httpbin.org/ip'res = requests.get(url)return res.json()['origin']def get_random_proxy():pool = redis.ConnectionPool(host='localhost', port=6379, db=0)r = redis.Redis(connection_pool=pool)ip = r.srandmember('proxy_ip_pool')return ip.decode('utf-8')# 隨機選擇代理IP進行訪問
def crawl(url):proxy = {'http': 'http://'+get_random_proxy(), 'https': 'https://'+get_random_proxy()}headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}try:res = requests.get(url, headers=headers, proxies=proxy, timeout=10)if res.status_code == 200:return res.textelse:return Noneexcept:return None
總結

需要注意的是,代理IP池的建立和使用需要注意IP的有效性和時效性,及時更新池中的IP地址,以保證代理IP的可用性。同時,在使用代理IP時需要遵守相關法律法規和網站的使用協議,不得用于非法活動。

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

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

相關文章

【深度學習所有損失函數】在 NumPy、TensorFlow 和 PyTorch 中實現(1/2)

一、說明 在本文中,討論了深度學習中使用的所有常見損失函數,并在NumPy,PyTorch和TensorFlow中實現了它們。 二、內容提要 我們本文所談的代價函數如下所列: 均方誤差 (MSE) 損失二進制交叉熵損失加權二進…

“深入解析JVM內部機制:探索Java虛擬機的奧秘“

標題:深入解析JVM內部機制:探索Java虛擬機的奧秘 JVM(Java虛擬機)是Java程序的核心執行環境,它負責將Java字節碼轉換為機器碼并執行。了解JVM的內部機制對于理解Java程序的執行過程和性能優化至關重要。本文將深入解析…

開啟想象翅膀:輕松實現文本生成模型的創作應用,支持LLaMA、ChatGLM、UDA、GPT2、Seq2Seq、BART、T5、SongNet等模型,開箱即用

開啟想象翅膀:輕松實現文本生成模型的創作應用,支持LLaMA、ChatGLM、UDA、GPT2、Seq2Seq、BART、T5、SongNet等模型,開箱即用 TextGen: Implementation of Text Generation models 1.介紹 TextGen實現了多種文本生成模型,包括&a…

c++——::作用域、命名空間、using(聲明和編譯指令)

c 作用域和名字控制 一、::(雙冒號) 作用域 <::>運算符是一個作用域如果<::>前面什么都沒有加 代表是全局作用域 二、命名空間&#xff08;namespace) 1、namespace 本質是作用域,可以更好的控制標識符的作用域命名空間 就可以存放 變量 函數 類 結構體 … 2…

【kubernetes】在k8s集群環境上,部署kubesphere

部署kubesphere 學習于尚硅谷kubesphere課程 前置環境配置-部署默認存儲類型 這里使用nfs #所有節點安裝 yum install -y nfs-utils# 在master節點執行以下命令 echo "/nfs/data/ *(insecure,rw,sync,no_root_squash)" > /etc/exports # 執行以下命令&#xff…

QML與C++交互

目錄 1 QML獲取C的變量值 2 QML獲取C創建的自定義對象 3 QML發送信號綁定C端的槽 4 C端發送信號綁定qml端槽 5 C調用QML端函數 1 QML獲取C的變量值 QQmlApplicationEngine engine; 全局對象 上下文屬性 QQmlApplicationEngine engine; QQmlContext *context1 engine.…

flowable流程移植新項目前端問題匯總

flowable流程移植到新項目時&#xff0c;出現一些前端問題&#xff0c;匯總如下&#xff1a; PS F:\khxm\NBCIO_VUE> yarn run serve yarn run v1.21.1 $ vue-cli-service serve INFO Starting development server... ERROR Error: Vue packages version mismatch: -…

25 | 葡萄酒質量數據分析

基于kaggle提供的公開數據集,對全球葡萄酒分布情況和質量情況進行數據探索和分析 from kaggle: https://www.kaggle.com/zynicide/wine-reviews 分析思路: 0、數據準備 1、葡萄酒的種類 2、葡萄酒質量 3、葡萄酒價格 4、葡萄酒描述詞庫 5、品鑒師信息 6、總結 0、數據準備 …

學習Vue:組件的概念和優勢

在現代的前端開發中&#xff0c;組件化開發是一種重要的方法&#xff0c;它可以將復雜的應用程序拆分成多個獨立的、可復用的組件。Vue.js 是一個流行的前端框架&#xff0c;它支持組件化開發&#xff0c;讓開發者能夠更輕松地構建和維護復雜的用戶界面。在本文中&#xff0c;我…

計算機組成部分

計算機的五大部件是什么&#xff1f;答案&#xff1a;計算機的五大部件是運算器&#xff0c;控制器&#xff0c;存儲器&#xff0c;輸入設備和輸出設備。 其中運算器和控制器合稱中央處理器&#xff0c;是計算機的核心部件&#xff1b; 存儲器是用來存儲程序指令和數據用的&am…

修改第三方組件默認樣式

深度選擇器 修改el-input的樣式&#xff1a; <el-input class"input-area"></el-input>查看DOM結構&#xff1a; 原本使用 /deep/ 但是可能不兼容 使用 :deep .input-area {:deep(.el-input__inner){background-color: blue;} }將 input 框背景色改為…

【Kubernetes】Kubernetes的Pod進階

Pod進階 一、資源限制和重啟策略1. 資源限制2. 資源單位2.1 CPU 資源單位2.2 內存 資源單位 3. 重啟策略&#xff08;restartPolicy&#xff09; 二、健康檢查的概念1. 健康檢查1.1 探針的三種規則1.2 Probe 支持三種檢查方法 2. 示例2.1 exec 方式2.2 httpGet 方式2.3 tcpSock…

臨床試驗三原則-對照、重復、隨機

臨床試驗必須遵循三個基本原則&#xff1a;對照、重復、隨機。 一、對照原則和對照的設置 核心觀點&#xff1a;有比較才有鑒別。 對照組和試驗組同質可比。 三臂試驗 安慰劑&#xff1a;試驗組&#xff1a;陽性對照組1&#xff1a;n&#xff1a;m&#xff08;n≥m&#xff…

FFmpeg常見命令行(五):FFmpeg濾鏡使用

前言 在Android音視頻開發中&#xff0c;網上知識點過于零碎&#xff0c;自學起來難度非常大&#xff0c;不過音視頻大牛Jhuster提出了《Android 音視頻從入門到提高 - 任務列表》&#xff0c;結合我自己的工作學習經歷&#xff0c;我準備寫一個音視頻系列blog。本文是音視頻系…

Nginx反向代理服務流式輸出設置

Nginx反向代理服務流式輸出設置 1.問題場景 提問&#xff1a;為什么我部署的服務沒有流式響應 最近在重構原有的GPT項目時&#xff0c;遇到gpt回答速度很慢的現象。在使用流式輸出的接口時&#xff0c;接口響應速度居然還是達到了30s以上。 2.現象分析 分析現象我發現&…

Leetcode鏈表篇 Day3

.24. 兩兩交換鏈表中的節點 - 力扣&#xff08;LeetCode&#xff09; 1.構建虛擬結點 2.兩兩一組&#xff0c;前繼結點一定在兩兩的前面 3.保存結點1和結點3 19. 刪除鏈表的倒數第 N 個結點 - 力扣&#xff08;LeetCode&#xff09; 1.雙指針&#xff1a;快慢指針 兩個指針的差…

新能源汽車需要檢測哪些項目

截至2022年底&#xff0c;中國新能源車保有量達1310萬輛&#xff0c;其中純電動汽車保有量1045萬輛。為把好新能源汽車安全關&#xff0c;我國新能源汽車除了完善的強制性產品認證型式實驗外&#xff0c;還建立了“車企-地方-國家”逐級上報的三級監管體系實行新能源汽車全生命…

2023.8.14論文閱讀

文章目錄 ESPNet: Efficient Spatial Pyramid of Dilated Convolutions for Semantic Segmentation摘要本文方法實驗結果 DeepFusion: Lidar-Camera Deep Fusion for Multi-Modal 3D Object Detection摘要本文方法實驗結果 ESPNet: Efficient Spatial Pyramid of Dilated Convo…

vue 路由地址把#去掉

在路由對象里邊添加history模式就不顯示# mode:history // 4.通過規則創建對象 const router new VueRouter({routes,// 默認模式為hash 帶# // history 不帶#mode:history })想把端口號8000換成其他的 比如我這樣的3000更換端口號教程

Android Framework 動態更新插拔設備節點執行權限

TF卡設備節點是插上之后動態添加&#xff0c;所以不能通過初始化設備節點權限來解決&#xff0c;需要監聽TF插入事件&#xff0c;在init.rc 監聽插入后動態更新設備節點執行權限 添加插拔TF卡監聽 frameworks/base/services/core/java/com/android/server/StorageManagerServic…