【Python】爬虫代理IP的使用+建立代理IP池
目录
前言
一、代理IP
1. 代理IP的获取
2. 代理IP的验证
3. 代理IP的使用
二、建立代理IP池
1. 代理IP池的建立
2. 动态维护代理IP池
三、完整代码
总结
前言
在进行网络爬虫开发时,我们很容易遭遇反爬虫机制的阻碍。为了规避反爬虫机制,我们可以使用代理IP。代理IP是指通过代理服务器获取的可用于访问目标网站的IP地址,通过使用代理IP,我们可以隐藏自己的真实IP地址,避免被目标网站封禁。
但是,在使用代理IP时,我们需要注意一些问题:
- 代理IP的质量。有些代理IP可能无法正常使用,需要对代理IP进行筛选和测试,确保代理IP的可用性。
- 代理IP的多样性。不同位置、不同类型的代理IP都可以使用。我们需要建立起代理IP池,方便灵活地切换代理IP,提高抓取效率。
本文将介绍如何使用python爬虫实现代理IP的使用以及代理IP池的建立。
一、代理IP
1. 代理IP的获取
我们可以从代理IP供应商处购买或免费获取代理IP,也可以自己搭建代理服务器获取代理IP。
这里以免费获取代理IP为例。我们可以从以下网站获取免费代理IP:
https://www.zdaye.com/
https://www.kxdaili.com/
https://www.ip3366.net/
2. 代理IP的验证
通过免费获取的代理IP,我们不能保证其全部可用。因此,我们需要对代理IP进行验证。
验证代理IP的代码如下:
import requestsdef check_proxy(proxy):try:res = requests.get('http://www.baidu.com', proxies=proxy, timeout=5)if res.status_code == 200:return Trueelse:return Falseexcept:return False
我们通过访问百度网站来验证代理IP的可用性。如果可以成功访问,则返回True,否则返回False。如果代理IP的可用性值为True,则可以将其添加到代理IP池中,供后续使用。
3. 代理IP的使用
使用代理IP的代码如下:
import requestsdef get_html(url, 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=5)if res.status_code == 200:return res.textelse:return Noneexcept:return None
我们通过为requests库的get方法传递一个proxies参数来使用代理IP。如果请求成功,则返回响应内容;否则返回None,表示请求失败。
二、建立代理IP池
1. 代理IP池的建立
我们可以从多个代理IP供应商处获取代理IP。在使用代理IP时,我们随机从代理IP池中选择一个代理IP,保证请求的随机性,提高反爬虫机制的规避效果。
代理IP池的建立代码如下:
import random
import requestsclass ProxyPool(object):def __init__(self):self.pool = []def add_proxy(self, proxy):if self.check_proxy(proxy):self.pool.append(proxy)def check_proxy(self, proxy):try:res = requests.get('http://www.baidu.com', proxies=proxy, timeout=5)if res.status_code == 200:return Trueelse:return Falseexcept:return Falsedef get_proxy(self):if not self.pool:return Nonereturn random.choice(self.pool)
我们可以通过add_proxy方法往代理IP池中添加代理IP,通过get_proxy方法来随机获取一个可用的代理IP。
2. 动态维护代理IP池
在使用代理IP时,我们需要不断地维护代理IP池,剔除失效的代理IP,添加新的代理IP。
动态维护代理IP池的代码示例:
import time
from threading import Threadclass ProxyPool(object):def __init__(self):self.pool = []self.check_interval = 600 # 代理IP检查周期,单位为秒Thread(target=self.check_proxy_loop).start()def add_proxy(self, proxy):if self.check_proxy(proxy):self.pool.append(proxy)def check_proxy(self, proxy):try:res = requests.get('http://www.baidu.com', proxies=proxy, timeout=5)if res.status_code == 200:return Trueelse:return Falseexcept:return Falsedef get_proxy(self):if not self.pool:return Nonereturn random.choice(self.pool)def check_proxy_loop(self):while True:for proxy in self.pool:if not self.check_proxy(proxy):self.pool.remove(proxy)print('{} removed from proxy pool'.format(proxy))time.sleep(self.check_interval)
在代理IP池的构造函数中,我们创建了一个线程来循环检查代理IP池中的代理IP。如果检查到某个代理IP失效,则将其从代理IP池中移除,并在控制台输出信息提示。
三、完整代码
import random
import requests
from threading import Thread
import timeclass ProxyPool(object):def __init__(self):self.pool = []self.check_interval = 600 # 代理IP检查周期,单位为秒Thread(target=self.check_proxy_loop).start()def add_proxy(self, proxy):if self.check_proxy(proxy):self.pool.append(proxy)def check_proxy(self, proxy):try:res = requests.get('http://www.baidu.com', proxies=proxy, timeout=5)if res.status_code == 200:return Trueelse:return Falseexcept:return Falsedef get_proxy(self):if not self.pool:return Nonereturn random.choice(self.pool)def check_proxy_loop(self):while True:for proxy in self.pool:if not self.check_proxy(proxy):self.pool.remove(proxy)print('{} removed from proxy pool'.format(proxy))time.sleep(self.check_interval)def main():proxy_pool = ProxyPool()url = 'https://www.baidu.com'proxy = {'http': 'http://127.0.0.1:8080', 'https': 'http://127.0.0.1:8080'}html = get_html(url, proxy)print(html)if __name__ == '__main__':main()
总结
本文介绍了如何使用python爬虫实现代理IP的使用以及代理IP池的建立。在使用代理IP时,我们需要注意代理IP的质量和多样性。在使用代理IP池时,我们需要不断地维护代理IP池,剔除失效的代理IP,添加新的代理IP,以免影响爬虫的性能。
相关文章:
【Python】爬虫代理IP的使用+建立代理IP池
目录 前言 一、代理IP 1. 代理IP的获取 2. 代理IP的验证 3. 代理IP的使用 二、建立代理IP池 1. 代理IP池的建立 2. 动态维护代理IP池 三、完整代码 总结 前言 在进行网络爬虫开发时,我们很容易遭遇反爬虫机制的阻碍。为了规避反爬虫机制,我们…...
JS-项目实战-新增水果库存功能实现
1、fruit.js function $(name) {if (name) {//假设name是 #fruit_tblif (name.startsWith("#")) {name name.substring(1); //fruit_tblreturn document.getElementById(name);} else {return document.getElementsByName(name); //返回的是NodeList类型}} }//当…...
mysql 常见操作指令
use k_order – 查看版本 select version(); – 查看所有数据库 show databases; – 查看所有执行引擎 show engines; – 查看当前数据库 select database(); – 查看所有table show tables; – 查看默认存储引擎 SHOW VARIABLES LIKE ‘default_storage_engine’; – 系…...
Vue3 生命周期
如下是Vue3的生命周期函数图: 一、Vue2生命周期和Vue3声明周期的区别 1. Vue2 中,只要创建Vue实例对象而不需要挂载就可以实现beforeCreate 和 created 生命周期函数。 Vue3中必须要将Vue实例对象挂载完成,所有的准备工作做完,…...
rocketmq 安装dashboard1.0.0 mq消息控制台安装 rocketmq控制台安装 rocketmq-dashboard-1.0.0编译安装
1. 官网: 下载 | RocketMQ 2. dashboard安装包位置: 在连接最下面,点击download.zip即可 3. 需要安装maven, 编译命令: mvn clean install -U -Dmaven.test.skiptrue4. 启动jar: java -jar rocketmq-dashboard-1.0.0.jar &…...
常见的数据结构有哪些?
数据结构分为逻辑结构和物理结构。 逻辑结构:指数据元素之间逻辑关系的数据结构,这里的逻辑关系是指数据元素之间的前后间关系,与数据在计算机中的存储位置无关。物理结构:指数据的逻辑结构在计算机存储空间中的存放形式称为数据…...
Spring中有哪几种方法获取HttpSession对象
Spring MVC 可以直接作为Controller的参数传入: RequestMapping(value "/test", method RequestMethod.POST, produces "application/json;charsetUTF-8")ResponseBodypublic Map test(HttpSession session, String otherParam) {//TODOre…...
springboot开启Redis缓存支持
开启缓存支持,只需要继承CachingConfigurerSupport 即可。代码如下: import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.PropertyAccessor; import com.fasterxml.jackson.databind.ObjectMapper; impo…...
2.4 矩阵的运算法则
矩阵是数字或 “元素” 的矩形阵列。当矩阵 A A A 有 m m m 行 n n n 列,则是一个 m n m\times n mn 的矩阵。如果矩阵的形状相同,则它们可以相加。矩阵也可以乘上任意常数 c c c。以下是 A B AB AB 和 2 A 2A 2A 的例子,它们都是 …...
让文字在盒子中水平居中与垂直居中
简单方法: 1.先用text-align: center;将文字垂直居中。 2.再用line-height: Xpx;将元素的行高设置为与父元素同样的高度。(这里的X代表父元素的高度) 举例: 对于该网页的代码如下: <!DOCTYPE html> <html&…...
聊一聊前端面临的安全威胁与解决对策
前端是用户在使用您的网站或Web应用程序时首先体验到的东西。如果您的Web应用程序的前端受到侵害,它可能会影响整个布局,并造成糟糕的用户体验,可能难以恢复。集成前端安全变得越来越重要,本文将指导您通过可以应用于保护您的Web应…...
【matlab学习】现代控制
文章目录 (1) SISO Modeling(2) MIMO Modeling(3) 状态空间模型(4) 状态空间模型->传递函数(5) 传递函数->状态空间模型(6) 状态空间模型变换(7) 特征值和特征向量(8) 广义特征向量(9) 状态空间模型->约旦型 (1) SISO Modeling y ( k 2 ) 5 y ( k 1 ) 6 y ( k ) …...
Debezium报错处理系列之九十九:ConnectException: Source offset ‘file‘ parameter is missing
Debezium报错处理系列之九十九:ConnectException: Source offset file parameter is missing 一、完整报错二、错误原因三、解决方法研究Debezium技术遇到的各种错误解决方法系列文章传送门: Debezium从入门到精通系列之:百篇系列文章汇总之研究Debezium技术遇到的各种错误的…...
基于深度学习的活体人脸识别检测算法matlab仿真
目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1. 活体人脸识别检测算法概述 4.2. 深度学习在活体人脸识别检测中的应用 4.3. 算法流程 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022a 3.部分核心程序 …...
Angular 由一个bug说起之二:trackBy的一点注意事项
trackBy是angualr优化项目性能的一种方法, 通过返回一个具有绑定性的唯一值, 比如id,手机号,身份证号之类的,来让angular能够跟踪数组的项目,根据数据的变化来重新生成DOM, 这样就节约了性能。 但是如果是使用ngFor循环组件&…...
单片机FLASH下载算法的制作
环境 硬件使用正点原子STM32F407探索者V2开发板 编程环境使用MDK 下载工具使用JLINK FLASH芯片使用W25Q128 什么是下载算法 单片机FLASH的下载算法是一个FLM文件,FLM通过编译链接得到,其内部包含一系列对FLASH的操作,包括初始化、擦除、写…...
[nlp] 损失缩放(Loss Scaling)loss sacle
在深度学习中,由于浮点数的精度限制,当模型参数非常大时,会出现数值溢出的问题,这可能会导致模型训练不稳定。为了解决这个问题,损失缩放(Loss Scaling)技术被引入,它通过缩放损失值来解决这个问题。 在深度学习中,损失缩放技术通常是通过将梯度进行缩放来实现的。具…...
Django框架之视图层
【一】三板斧 【1】HttpResponse 返回字符串类型 【2】render 返回html页面,并且在返回给浏览器之前还可以给html页面传值 【3】redirect 重定向页面 在视图文件中写视图函数的时候不能没有返回值了,默认返回的是None,页面上就会报错 d…...
商城免费搭建之java商城 java电子商务Spring Cloud+Spring Boot+mybatis+MQ+VR全景+b2b2c
1. 涉及平台 平台管理、商家端(PC端、手机端)、买家平台(H5/公众号、小程序、APP端(IOS/Android)、微服务平台(业务服务) 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis 3. 前端框架…...
AI机器学习实战 | 使用 Python 和 scikit-learn 库进行情感分析
专栏集锦,大佬们可以收藏以备不时之需 Spring Cloud实战专栏:https://blog.csdn.net/superdangbo/category_9270827.html Python 实战专栏:https://blog.csdn.net/superdangbo/category_9271194.html Logback 详解专栏:https:/…...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...
前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...
江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...
自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...
JAVA后端开发——多租户
数据隔离是多租户系统中的核心概念,确保一个租户(在这个系统中可能是一个公司或一个独立的客户)的数据对其他租户是不可见的。在 RuoYi 框架(您当前项目所使用的基础框架)中,这通常是通过在数据表中增加一个…...
【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...
DingDing机器人群消息推送
文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人,点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置,详见说明文档 成功后,记录Webhook 2 API文档说明 点击设置说明 查看自…...
解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用
在工业制造领域,无损检测(NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统,以非接触式光学麦克风技术为核心,打破传统检测瓶颈,为半导体、航空航天、汽车制造等行业提供了高灵敏…...
mac:大模型系列测试
0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何,是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试,是可以跑通文章里面的代码。训练速度也是很快的。 注意…...
