Python搭建代理IP池实现存储IP的方法

目录

前言

1. 介绍

2. IP存储方法

2.1 存储到数据库

2.2 存储到文件

2.3 存储到内存

3. 完整代码示例

总结



前言

代理IP池是一种常用的网络爬虫技术,可以用于反爬虫、批量访问目标网站等场景。本文介绍了使用Python搭建代理IP池,并实现IP存储的方法。首先,介绍了代理IP的概念和使用场景。然后,详细介绍了IP存储的几种方法,包括存储到数据库、存储到文件和存储到内存中。最后,给出了完整的代码示例。

1. 介绍

代理IP池是一种常用的网络爬虫技术,它通过维护一组可用的代理IP地址,用于隐藏用户真实IP地址,以实现反爬虫、批量访问目标网站等目的。代理IP可以分为公开代理和私密代理两种类型。公开代理是免费提供给大众使用的代理IP,它的可用性较低,适合于一些对速度和稳定性要求不高的场景。私密代理是需付费使用的代理IP,由于可用性较高,适合于对速度和稳定性要求较高的场景。

2. IP存储方法

代理IP池需要维护一组可用的代理IP地址,因此需要一种方法来存储这些IP地址。下面介绍几种常用的IP存储方法。

2.1 存储到数据库

将代理IP存储到数据库中是一种常用的方法。使用数据库可以方便地进行IP的增删改查操作,并且可以与其他数据进行关联。常用的数据库包括MySQL、MongoDB等。以下是一个使用MySQL存储代理IP的示例代码:

import pymysql# 连接数据库
conn = pymysql.connect(host='localhost',port=3306,user='root',password='password',db='proxy_ip',charset='utf8'
)# 创建游标对象
cursor = conn.cursor()# 创建代理IP表
sql = '''
CREATE TABLE IF NOT EXISTS proxy_ip (id INT AUTO_INCREMENT PRIMARY KEY,ip VARCHAR(50) NOT NULL,port INT NOT NULL,type VARCHAR(10) NOT NULL,speed FLOAT NOT NULL
)
'''
cursor.execute(sql)# 插入代理IP
def insert_proxy(ip, port, type, speed):sql = '''INSERT INTO proxy_ip (ip, port, type, speed)VALUES ('{}', {}, '{}', {});'''.format(ip, port, type, speed)cursor.execute(sql)conn.commit()# 查询代理IP
def select_proxy():sql = '''SELECT * FROM proxy_ip;'''cursor.execute(sql)results = cursor.fetchall()for row in results:print(row)# 关闭数据库连接
cursor.close()
conn.close()

2.2 存储到文件

将代理IP存储到文件中是另一种常用的方法。使用文件可以方便地进行IP的读写操作,但是不方便进行增删改查操作。以下是一个使用文本文件存储代理IP的示例代码:

# 写入代理IP到文件
def write_proxy(ip, port, type, speed):with open('proxy_ip.txt', 'a') as f:f.write('{},{}:{},{}\n'.format(type, ip, port, speed))# 读取代理IP文件
def read_proxy():with open('proxy_ip.txt', 'r') as f:lines = f.readlines()for line in lines:type, ip_port, speed = line.strip().split(',')ip, port = ip_port.split(':')print(ip, port, type, speed)

2.3 存储到内存

将代理IP存储到内存中是一种简单高效的方法,适用于数据量较小的场景。以下是一个使用列表存储代理IP的示例代码:

# 定义全局变量
proxy_ips = []# 添加代理IP到列表
def add_proxy(ip, port, type, speed):proxy_ips.append((ip, port, type, speed))# 输出代理IP列表
def print_proxy():for ip, port, type, speed in proxy_ips:print(ip, port, type, speed)

3. 完整代码示例

下面是一个完整的使用Python搭建代理IP池,并实现IP存储的示例代码:

import pymysql# 连接数据库
conn = pymysql.connect(host='localhost',port=3306,user='root',password='password',db='proxy_ip',charset='utf8'
)# 创建游标对象
cursor = conn.cursor()# 创建代理IP表
sql = '''
CREATE TABLE IF NOT EXISTS proxy_ip (id INT AUTO_INCREMENT PRIMARY KEY,ip VARCHAR(50) NOT NULL,port INT NOT NULL,type VARCHAR(10) NOT NULL,speed FLOAT NOT NULL
)
'''
cursor.execute(sql)# 插入代理IP
def insert_proxy(ip, port, type, speed):sql = '''INSERT INTO proxy_ip (ip, port, type, speed)VALUES ('{}', {}, '{}', {});'''.format(ip, port, type, speed)cursor.execute(sql)conn.commit()# 查询代理IP
def select_proxy():sql = '''SELECT * FROM proxy_ip;'''cursor.execute(sql)results = cursor.fetchall()for row in results:print(row)# 添加代理IP到列表
def add_proxy(ip, port, type, speed):proxy_ips.append((ip, port, type, speed))# 输出代理IP列表
def print_proxy():for ip, port, type, speed in proxy_ips:print(ip, port, type, speed)# 关闭数据库连接
cursor.close()
conn.close()

总结

本文介绍了使用Python搭建代理IP池,并实现IP存储的方法。存储IP的方法包括存储到数据库、存储到文件和存储到内存中。不同的存储方法适用于不同场景,开发者可以根据实际需求选择合适的方法。使用代理IP池可以提高网站爬取效率,防止被目标网站反爬虫。希望本文对大家了解Python搭建代理IP池有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/593978.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

三菱结构化While指令的使用

最近在交流群中,有人就while指令使用错误进行了讨论,问题的总的原因是对While指令理解不到位导致,PLC看门狗报错! 错误使用While指令导致看门狗报错 下面就While指令的使用进行说明 WHILE语句。 WHILE语句执行时首先检测条件。…

成为一名合格的前端架构师,前端知识技能与项目实战教学

一、教程描述 本套前端架构师教程,大小35.94G,共有672个文件。 二、教程目录 01.node介绍和环境配置(共6课时) 02.ES6语法(共5课时) 03.node基础(共29课时) 04.Express框架&am…

大语言模型LLM微调技术:P-Tuning

1 引言 Bert时代,我们常做预训练模型微调(Fine-tuning),即根据不同下游任务,引入各种辅助任务loss和垂直领域数据,将其添加到预训练模型中,以便让模型更加适配下游任务的方式。每个下游任务都存…

Redis:原理速成+项目实战——Redis实战4(解决Redis缓存穿透、雪崩、击穿)

👨‍🎓作者简介:一位大四、研0学生,正在努力准备大四暑假的实习 🌌上期文章:Redis:原理项目实战——Redis实战3(Redis缓存最佳实践(问题解析高级实现)&#x…

计算器——可支持小数的任意四则运算(中缀表达式转为后缀表达式算法)

中缀表达式转为后缀表达式的原理过程主要包括以下步骤: 1. 初始化两个栈,一个用于存储操作数,一个用于存储运算符。2. 从左到右扫描中缀表达式的每个字符。3. 如果遇到数字,则直接将其压入操作数栈。4. 如果遇到运算符&#xff0c…

CSS 中间位置翻转动画

<template><div class"container" mouseenter"startAnimation" mouseleave"stopAnimation"><!-- 旋方块 --><div class"box" :class"{ rotate-hor-center: isAnimating }"><!-- 元素内容 -->…

msvcp140.dll丢失的错误解决办法,msvcp140.dll丢失的原因

如果你的电脑中正处于msvcp140.dll丢失或找不到msvcp140.dll的问题&#xff0c;那么可以尝试使用下面的方法进行解决msvcp140.dll丢失的问题。其实msvcp140.dll文件丢失的问题解决办法也很简单&#xff0c;但是出现msvcp140.dll丢失的问题却可能是有很多原因。接下来就给大家分…

约束满足问题简介

约束满足问题的定义 约束满足问题&#xff08;Constraint Satisfying Problem, CSP&#xff09; – 由一个变量集合和一个约束集合定义&#xff1b; – 每个变量都有一个非空可能值域&#xff1b; – 每个约束指定了包含若干变量的一个子集内各变量的赋值范围。 例如&…

互联网加竞赛 Yolov安全帽佩戴检测 危险区域进入检测 - 深度学习 opencv

1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; Yolov安全帽佩戴检测 危险区域进入检测 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;3分创新点&#xff1a;4分 该项目较为新颖&am…

打造专业开发者指南:针对ShardingProxy分库分表解决策略的深度剖析 – 详解部署、使用、服务治理与优化技巧

一、 ShardingProxy快速使用 ShardingProxy的功能同样是分库分表&#xff0c;但是他是一个独立部署的服务端&#xff0c;提供 统一的数据库代理服务。注意&#xff0c;ShardingProxy目前只支持MySQL和PostgreSQL。并且&#xff0c;客户端连接ShardingProxy时&#xff0c;最好使…

多模态大模型Vary:扩充视觉Vocabulary,实现更细粒度的视觉感知

前言 现代大型视觉语言模型(LVLMs)具有相同的视觉词汇- CLIP&#xff0c;它可以涵盖大多数常见的视觉任务。然而&#xff0c;对于一些需要密集和细粒度视觉感知的特殊视觉任务&#xff0c;例如文档级OCR或图表理解&#xff0c;特别是在非英语场景下&#xff0c;clip风格的词汇…

Springboot集成RabbitMq二

接上一篇&#xff1a;Springboot集成RabbitMq一-CSDN博客 1、搭建项目-消费者 与之前一样 2、创建配置类 package com.wym.rabbitmqconsumer.utils;import org.springframework.amqp.core.Binding; import org.springframework.amqp.core.BindingBuilder; import org.spring…

JDK17 - 开发者视角,从 JDK8 ~ JDK17 都增加了哪些新特性

目录 前言 一、站在开发视角&#xff0c;从 JDK8 升级到 JDK17 都有哪些新特性 1.1、JDK8 新特性 1.1.1、Optional 类 a&#xff09;简介 b&#xff09;使用方法 c&#xff09;使用场景 1.2、JDK9 新特性 1.2.1、Optional - ifPresentOrElse 解决 if-else 1.2.2、Opt…

Java程序设计阶段测试1

一、单选题&#xff08;共15题&#xff1b; 共30.0分&#xff09; 2.0分 1、以下哪个是Java应用程序main方法的有效定义? A.public static void main(); B.public static void main( String args ); C.public static void main( String args[] ); D.public static boolea…

Go Lang Fiber介绍

利用GoLang Fiber进行高性能Web开发 在不断发展的Web开发世界中&#xff0c;选择合适的框架至关重要。速度、简洁性和强大的功能集是每个开发者都追求的品质。在使用Go构建Web应用时&#xff0c;“Fiber”作为一个强大且轻量级的框架在众多选择中脱颖而出。在这份全面的指南中…

扩展:键盘录入笔记(next()、nextLine()、nextInt()、nextDouble())

文章目录 一&#xff0c;键盘录入涉及到的方法如下&#xff1a;1&#xff09;next&#xff08;&#xff09;、nextLine&#xff08;&#xff09;&#xff1a;代码示例&#xff1a;代码示例&#xff1a; 2&#xff09;nextInt&#xff08;&#xff09;&#xff1a;代码示例&…

无辅源电压继电器 RWY-D2/3 180-440VAC 导轨安装 josef约瑟

RWY-D1型电压继电器&#xff1b; RWY-D2型电压继电器&#xff1b; 一、 概述 RWY-D系列电压继电器&#xff08;以下简称本继电器&#xff09;用于发电机、变压器和输电线的电器保护装置中&#xff0c;作为过电压保护或低电压闭锁的启动原件。本继电器为集成电路静态型继电器…

设计模式--适配器模式

适配器模式 适配器模式&#xff08;Adapter&#xff09;&#xff0c;将一个类的接口转换为客户希望的另一个接口&#xff0c;Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 系统的数据和行为都正确&#xff0c;但接口不符合时&#xff0c;我们应该…

Python入门学习篇(十七)——封装、继承、多态

1 封装 1.1 理解 属性和方法书写到类里面的操作即为封装 封装可以理解成私有化属性和私有化方法1.2 示例代码 class Person():p_num 0 # 用于统计数量def __init__(self, name, age, sex, job):# __name为私有化属性self.__name nameself.age ageself.sex sexself.job …

使用anaconda创建爬虫spyder工程

1.由于每个工程使用的环境都可能不一样&#xff0c;因此一个好的习惯就是不同的工程都创建属于自己的环境&#xff0c;在anaconda中默认的环境是base&#xff0c;我们现在来创建一个名为spyder的环境&#xff0c;专门用于爬虫工程&#xff1a; //括号中名字&#xff0c;代表当…