【从零开始】自建高质量免费ip代理池(截止2024.4.1最新版)

文章目录

  • 前言
  • 基础常识
    • 代理服务器
    • 状态码
    • 端口号
  • 常见免费ip代理池网站
  • 实现思路
  • 代码实现
    • main.py
    • utils.py
    • demo.py
  • 结果如下


前言

为了防止ip被封后还能爬取网页,最常见的方法就是自己构建一个ip代理池。

本来用的是下面这个开源项目ip代理池,
github开源项目
就是这个开源项目上好多免费的ip网站做了更新,导致它能获取的可用的代理频率不高,且它只是做了获取工作,没有做任何的测试,导致获取的代理匿名性层次不齐。用它获取的ip,用www.example.com来做目标url,一个循环20次,也不能每次都能拿到网页上的数据,于是得自己做一个高质量的ip获取池。

不过它开源的代码上也是有不少可以借鉴的。


基础常识

代理服务器

根据支持的协议分类:
HTTP代理:主要用于普通的网页浏览,可以转发HTTP请求(详见:HTTP请求方法)。
SSL/HTTPS代理:支持HTTPS协议,可以为使用SSL加密的网站提供安全的数据传输。(安全性较高的匿名浏览的好选择)
Socket4/5代理:Socks4和Socks5支持更多的网络协议,不仅限于HTTP和HTTPS,适用于更广泛的网络请求。(支持多种协议代理的好选择)

Socket4:只支持 TCP 协议,不支持 UDP 协议,也不支持域名解析(DNS)。
Socket5:支持 TCP 和 UDP 协议,支持多种身份验证机制,以及服务器端域名解析。(可以完成socket4所有网络请求,首选)

根据匿名程度分类:
透明代理 (Transparent Proxy):服务器知道你是谁,网站也可以知道你的真实IP从而判断在使用代理。
匿名代理 (Anonymous Proxy):网站无法知道你的真实IP,但可以判断你正在使用代理。
混淆代理 (Distorting Proxy):会混淆你的真实IP,同时报告给网站一个虚假的IP地址。
高度匿名代理 (Elite Proxy):对方完全无法得知你的真实IP,网站无法检测到正在使用代理。

根据服务器的位置和范围分类:
全球代理:服务器分布在全球各地,可以提供多个国家和地区的IP地址。
国家特定代理:代理服务器仅位于特定国家或地区,提供该地区的IP地址。

根据IP来源分类:
数据中心IP:这些IP地址来源于数据中心,速度快,稳定性好,但容易被识别为代理。
住宅IP:来源于真实住宅网络,较难被识别为代理,适用于对匿名性要求较高的场景。
移动IP:来源于移动网络运营商,具有高匿名性,但速度和稳定性可能不如数据中心IP。

ISP 代理或静态住宅代理:试图结合数据中心和住宅代理的最佳品质。与住宅代理一样,它们归互联网服务提供商所有,而不是网络托管服务;与数据中心代理一样,它们托管在数据中心的服务器上,不涉及最终用户。

状态码

runoob:状态码解释

端口号

端口号大全
代理端口是什么意思呢?
HTTP代理是目前最为常用的代理,占用的端口一般为80/8080/3128/8081/9080。

HTTPS代理也叫SSL代理,占用端口一般为443。

SOCKS5代理与其他类型的代理都不同,只是起到数据包的传递作用,并不会受应用协议的局限,占用端口一般为1080。

FTP代理(文件传输)占用端口一般为21、2121。

这些端口号允许网络上的计算机识别和管理不同类型的网络流量和服务。正确配置代理端口对于确保网络请求正确路由至目标服务是非常重要的。

常见免费ip代理池网站

警告:请后续爬虫大佬爬取这些能用的代理时温柔以待,可能下次就会有更强大的反爬机制了。
我爬取时也是一天只爬一次,按需取用。(那种一直在爬的代理池应该挺有影响吧)

2022年的一篇博客
在这里插入图片描述
现:快代理加入反爬和免费代理库不能用

1、free-proxy-list (无反爬机制) 选择了elite+https (其中google的意思是可以爬外网的意思) 每10min更新一次
2、站大爷(连续爬取三次会给状态码500,三天后会解封但再爬取已爬取不到内容了,不建议爬,用了isp代理才可以爬到)# 选择了 响应时间3s内,存活时间1h以上,高匿 支持https,支持post,排序方式为响应时间从小到大
3、快代理(已使用动态加载安全保护,爬不了(能力不足),弃)(其中的优质私密代理还是挺好的)
4、proxy-list.download(直接调api接口,可爬)选择了https/SSL 每天更新一次
5、66代理(api调用,可爬)选择了超级域名+https 每10分钟更新一次
6、开心代理(可爬)选择了高匿+https 大概是每60min更新一次
7、FateZero (加载不出网页,不可用)
8、小幻代理 (可爬,网站要求控制速度) 选择了高匿+https+post 每天更新一次
9、云代理(可爬(没试过),看起来https的较少以及不能翻页的爬虫警告,弃)
10、89代理(可爬(没试过),但无高匿筛选,弃)
11、免费代理库(加载不出,弃)
12、稻壳代理(加载不出,弃)

其他代理:
用于网络抓取的最佳免费代理列表

可能的其他的爬取IP的方法:(搞个程序打开浏览器截图丢给bing识别保存)

实现思路

1、爬取免费代理ip
2、测试响应时间(按从快到慢排)
3、压力测试(连续爬example网站40次,若能通过,则为高质量ip)
4、post测试(可选)
5、持久化存储

我选取均为可https和可post的代理
测试pos时:使用了有道翻译post
参考:
【60行代码解决】2024年最新版python爬虫有道翻译js逆向
Python爬虫中如何通过post发请求,浏览器控制台抓包教程,有道翻译爬虫程序,通过python伪装翻译(post案例)

压力测试时:使用了线程和互斥锁
可参考:11.网络爬虫—多线程详讲与实战
最佳线程数参考:
计算最佳线程数
python的爬虫请求为CPU密集型,故选择
在这里插入图片描述
这里cpu的个数在任务管理器(任务栏上右键打开)上的性能得知:
在这里插入图片描述
它有8个核心。这意味着CPU有8个物理核心。物理核心数与逻辑处理器数不同,意味着CPU支持超线程技术,逻辑处理器的数量可能是物理核心数的两倍,此时我的电脑上的逻辑处理器为16,则我可以视作cpus = 16。

代码实现

main.py

from utils import get_free_list, get_proxy_list, get_66_ip, get_kx_ip,get_ihuan_ip,get_zdy_ip,test_connection,test_pressure,test_post
import random
import datetimedef random_proxy():func_inland =[get_free_list, get_proxy_list]func_outland =[get_66_ip, get_kx_ip, get_ihuan_ip, get_zdy_ip]# 从代理池中随机获取一个代理D = int(datetime.datetime.now().strftime('%d'))if D % 2 == 0:ip =get_zdy_ipelse:ip =[]passip_i = random.choice(func_inland)()+ipip_o = random.choice(func_outland)()+ipreturn ip_i+ip_odef save_proxy(ip):#如果没有此文件就创建一个print(ip)with open('./free_proxy_get/proxy.txt', 'w') as f:for i in ip:f.write(i+'\n') #在当前文件夹也保存一份(可选,为了方便)with open('proxy.txt', 'w') as f:for i in ip:f.write(i+'\n') 
def open_proxy():with open('./free_proxy_get/proxy.txt', 'r') as f:#一行一行读取ip = [line.strip() for line in f]return ipdef main():ip = open_proxy() #1.打开已经保存的代理,若少于6个则重新获取if len(ip) == 0:ip = random_proxy()ip = test_connection(ip) #2.测试httpsip = test_post(ip) #3.测试post(可选)ip = test_pressure(ip,40) #4.测试压力 max =40save_proxy(ip)#5.保存代理 从快到慢排if __name__ == '__main__':main()

utils.py

在我的github里
欢迎star

demo.py

运用代理池

def open_proxy():with open('./free_proxy_get/proxy.txt', 'r') as f:#一行一行读取ip = [line.strip() for line in f]return ipif __name__ == '__main__':ip = open_proxy()print(ip)pass

结果如下

在这里插入图片描述
保存的文件
在这里插入图片描述

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

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

相关文章

二维数字滤波器设计

Rafael C. Gonzalez “Digital Image Processing”的错误 按理说这本书的第三作者Steven是数字信号处理出身,他本人又对信号处理非常熟悉,不能理解为什么这本书的频域滤波器一章几乎没有对的地方。 对于巴特沃斯等模拟滤波器,利用全通带减去…

关于Qt的安装与版本更换

VS 2022 Qt 5.14.2配置记录_vs2022安装什么版本qt-CSDN博客

GPT 模型解析:ChatGPT 如何在语言处理领域引领潮流?

人工智能时代来临 我们正处于AI的iPhone时刻。——黄仁勋(英伟达CEO) ChatGPT 好得有点可怕了,我们距离危险的强人工智能不远了。——马斯克(Tesla/SpaceX/Twitter CEO) 以上的内容说明我们现在正处于一个技术大翻牌的…

就业班 第二阶段 2401--3.29 day9 shell之正则+数组

九、shell 编程-数组 普通数组:只能用整数作为数组的索引 关联数组:可以使用字符串作为数组的索引 数组定义 普通数组定义: [rootnewrain shell]# books( linux shell awk sed ) 引用: [rootnewrain shell]# echo ${books[0]} linux [rootnewrain shell]# echo ${books[1]…

大唐杯历届省赛押题训练(6)

考试-呼叫建立流程 一、单选题 1下面关于T-ADS被叫域选择下面说法正确的是( )1分/1分 A、被叫域选择是由MME发起的信令过程 B、T-ADS,过程是AS向3合1融合数据库查询T-ADS信息的过程 C、被叫域选择由主叫UE发起的域选择过程 D、主要是解决主叫驻留在那个网络的问题 提…

Avalonia笔记5-数据绑定

学习笔记&#xff1a; 1. 使用{Binding}标记拓展在XAML中进行绑定。通过绑定&#xff0c;所有数据上下文的变化都将自动更新到控件上。 <TextBlock Text"{Binding Name}"/> 2. 绑定模式 可以通过指定{Binding}的Mode来修改绑定的行为: OneWay 源的变化自动…

篮球竞赛预约平台的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)篮球馆,篮球赛,竞赛项目,赛事预约

本项目包含可运行源码数据库LW&#xff0c;文末可获取本项目的所有资料。 推荐阅读300套最新项目持续更新中..... 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含ja…

苍穹外卖06(HttpClient,微信小程序开发,微信登录流程,获取授权码从微信平台获取用户信息)

目录 一、HttpClient 1. 介绍 2. 入门案例 1 导入依赖(已有) 2 GET方式请求 2 POST方式请求 二、微信小程序开发 1. 介绍 2. 准备工作 1 注册小程序获取AppID 注册小程序 完善小程序信息 2 下载并安装开发者工具 3 设置小程序开发者工具(必做) 3. 入门案例 1 小…

Screeps Arena 游戏基础教程

一. 游戏内教程汉化1. 循环和导入&#xff08;Loop and Import&#xff09;2. 简单移动&#xff08;Simple move&#xff09;3. 首次攻击&#xff08;First Attack&#xff09;4. 爬虫的身体部分&#xff08;Creeps Bodies&#xff09;5. 存储和转移 &#xff08;Store and Tra…

通过提交容器的方式修改ubuntu镜像的apt源

通过提交容器的方式修改ubuntu镜像的apt源 步骤总结 问题&#xff0c;每次创建容器之后&#xff0c;都要在容器内手动更改镜像源。 不如&#xff0c;干脆修改镜像的apt源&#xff0c;一次到位。 步骤 先创建一个容器&#xff0c;到容器内执行变更命令。 D:/sandbox> dock…

江苏开放大学2024年春《中外设计史 060709》第二次测试参考答案

答案&#xff1a;更多答案&#xff0c;请关注【电大搜题】微信公众号 答案&#xff1a;更多答案&#xff0c;请关注【电大搜题】微信公众号 答案&#xff1a;更多答案&#xff0c;请关注【电大搜题】微信公众号 单选题 1美国现代建筑家赖特&#xff0c;提倡“有机建筑”的设…

Yarn 的安装和使用

在前端开发中&#xff0c;包管理工具是必不可少的利器&#xff0c;而 Yarn 就是其中一个备受欢迎的选择。本文将介绍如何安装和使用 Yarn&#xff0c;并解决可能遇到的一些常见问题&#xff0c;让你更高效地管理项目依赖。 什么是 Yarn&#xff1f; Yarn 是由 Facebook、Goo…

算法学习——LeetCode力扣图论篇1(797. 所有可能的路径、200. 岛屿数量、695. 岛屿的最大面积)

算法学习——LeetCode力扣图论篇1 797. 所有可能的路径 797. 所有可能的路径 - 力扣&#xff08;LeetCode&#xff09; 描述 给你一个有 n 个节点的 有向无环图&#xff08;DAG&#xff09;&#xff0c;请你找出所有从节点 0 到节点 n-1 的路径并输出&#xff08;不要求按特…

【单】Unity _RPG项目中的问题

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a; ⭐…

C++:多态、模板

一、多态 相同的代码、实现不同的功能 1.前提 1.类之间有继承关系 2.父类中有虚函数 3.父类的指针指向子类的对象 2.函数重写 1.发生在继承之间 2.父类中有虚函数 3.子类中对父类的虚函数重新实现 3.虚函数 1.在函数头前加上virtual 2.只要基类中的函数是虚函数&#xff0c;后…

MyBatis-Plus04(条件构造器)

条件构造器和常用接口 wrapper介绍 Wrapper &#xff1a; 条件构造抽象类&#xff0c;最顶端父类 AbstractWrapper &#xff1a; 用于查询条件封装&#xff0c;生成 sql 的 where 条件 QueryWrapper &#xff1a; 查询条件封装 UpdateWrapper &#xff1a; Update 条件封装 A…

如何在Ubuntu系统使用Nextcloud+Cpolar搭建可公网访问私人专属网盘

文章目录 1. 安装Docker2. 使用Docker拉取Nextcloud镜像3. 创建并启动Nextcloud容器4. 本地连接测试5. 公网远程访问本地Nextcloud容器5.1 内网穿透工具安装5.2 创建远程连接公网地址5.3 使用固定公网地址远程访问 正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛…

[选型必备基础信息] 存储器

存储芯片根据断电后是否保留存储的信息可分为易失性存储芯片&#xff08;RAM&#xff09;和非易失性存储芯片&#xff08;ROM&#xff09;。 简单说&#xff0c;存储类IC分为 ROM和RAM ROM&#xff1a;EEPROM / Flash / eMMC RAM&#xff1a;SRAM/SDRAM/DDR2/DDR3/DDR4/DDR5…

穿什么有这么重要?--装饰模式

1.1 穿什么有这么重要&#xff1f; 约会穿什么&#xff1f; "那要看你想给人家什么印象&#xff1f;是比较年轻&#xff0c;还是比较干练&#xff1b;是比较颓废&#xff0c;还是要比较阳光&#xff1b;也有可能你想给人家一种极其难忘的印象&#xff0c;那穿法又大不一样…

10秒钟用python接入讯飞星火API(保姆级)

正文&#xff1a; 科大讯飞是中国领先的人工智能公众公司&#xff0c;其讯飞星火API为开发者提供了丰富的接口和服务&#xff0c;以支持各种语音和语言技术的应用。 步骤一&#xff1a;注册账号并创建应用 首先&#xff0c;您需要访问科大讯飞开放平台官网&#xff0c;注册一个…