【从零开始】自建高质量免费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.rhkb.cn/news/295039.html

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

相关文章

InternLM

任务一 运行1.8B模型,并对话 User >>> 请创作一个 300 字的小故事 在一片茂密的森林里,住着一只小松鼠,它的名字叫做小雪。小雪非常活泼好动,经常在树上跳跃玩耍。有一天,小雪发现了一个神秘的洞穴&#xf…

主干网络篇 | YOLOv8改进之用RCS-OSA替换C2f(来源于RCS-YOLO)

前言:Hello大家好,我是小哥谈。RCS-YOLO是一种目标检测算法,它是基于YOLOv3算法的改进版本。通过查看RCS-YOLO的整体架构可知,其中包括RCS-OSA模块。RCS-OSA模块在模型中用于堆叠RCS模块,以确保特征的复用并加强不同层之间的信息流动。本文就给大家详细介绍如何将RCS-YOLO…

Crossmanager 2024 64 bit(CAD文件格式转换工具)安装包分享

新增功能 1、NavisWorks输入:首次发布,支持2016至2023版本 2、Fusion 360输入:首次发布,支持版本2.0 3、Catia V6/3D体验输入:支持R2023x版本 4、Solidworks输入:支持Solidworks 2023版本 5、Solid Ed…

加密/ 解密 PDF:使用Python为PDF文档设置、移除密码

在数字化时代,文档的安全性变得越来越重要。特别是对于包含敏感信息的PDF文件,确保其不被未经授权的人员访问或修改是至关重要的。本文将介绍如何使用Python在PDF文档中设置密码,以及如何移除已经设置的密码。 目录 PDF加密基础知识 Pytho…

应用层的http和https协议

HTTP和HTTPS http和https是什么?http 常用的协议版本http/1.0http/1.1改进http/2.0 改进 http 和https有什么区别? http和https是什么? HTTP(超文本传输协议)是一种用于在网络上传输超文本数据的协议。它是一种客户端-…

考研数学|《1800》+《660》精华搭配混合用(经验分享)

肯定不行,考研数学哪有这么容易的! 先说说这两本习题册,李永乐老师推出的新版660题,相较于18年前的版本,难度略有降低,更加适合初学者。因此,对于处于基础阶段的学习者来说,新版660…

ssm017网上花店设计+vue

网上花店的设计与实现 摘 要 网络技术和计算机技术发展至今,已经拥有了深厚的理论基础,并在现实中进行了充分运用,尤其是基于计算机运行的软件更是受到各界的关注。加上现在人们已经步入信息时代,所以对于信息的宣传和管理就很关…

用户体验:探讨Facebook如何优化用户体验

在数字化时代,用户体验是社交媒体平台成功与否的关键因素之一。作为全球最大的社交媒体平台之一,Facebook一直在努力优化用户体验,从功能设计到内容呈现再到隐私保护,不断提升用户满意度。本文将深入探讨Facebook如何优化用户体验…

【与C++的邂逅】---- 函数重载与引用

关注小庄 顿顿解馋(▿) 喜欢的小伙伴可以多多支持小庄的文章哦 📒 数据结构 📒 C 引言 : 上一篇博客我们了解了C入门语法的一部分,今天我们来了解函数重载,引用的技术,请放心食用 ~ 文章目录 一. 🏠 函数重…

获取用户位置数据,IP定位离线库助您洞悉消费者需求

获取用户位置数据是现代互联网应用中非常重要的一环。通过获取用户的位置数据,可以了解用户所在的地理位置,从而更好地为用户提供个性化的服务和推荐。而IP归属地离线库就是一种非常有用的工具,可以帮助企业准确地获取用户的位置信息。 IP归…

【Entity Framework】EF中DbSet类详解

【Entity Framework】EF中DbSet类详解 文章目录 【Entity Framework】EF中DbSet类详解一、概述二、定义DbSet2.1 具有DbSet属性的DbContext2.2 具有 IDbSet 属性的 DbContext 2.3 具有 IDbSet 属性的 DbContext三、DbSet属性四、DbSet方法五、DbContext动态生成DbSet 一、概述 …

后端基础篇- 社区 IDEA 手动 Maven 创建 SpringBoot 项目、Maven 安装与配置环境变量、IDEA 集成 Maven

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 Maven 安装与配置环境变量 1.1 下载并解压安装包 1.2 配置本地仓库 1.3 配置阿里云私服 1.4 配置环境变量 2.0 IDEA 集成 Maven 2.1 首先创建一个新项目 2.2 开始…

二维相位解包理论算法和软件【全文翻译-二维相位解缠的离散形式 (2.5)】

我们已经指出,二维相位解包相当于在覆盖相关领域的路径上对相位梯度进行积分。在实践中,我们当然必须处理采样数据。然而,为了做到这一点,我们必须定义离散域中的二维相位解包问题,并明确本书中将会用到的相关术语。 从最一般、限制最少的意义上讲,二维相位解包是一个不…

121314饿

c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话: 知不足而奋进,望远山而前行&am…

vue3鼠标向下滑动,导航条改变背景颜色和logo的封装

代码中使用了element-plus组件&#xff0c;需先安装 向下滑动前 向下滑动后&#xff08;改变了logo 字体 背景颜色&#xff09; <script lang"ts" setup> import router from /router; import { ArrowDown } from element-plus/icons-vue import { ref, …

实测梳理一下kafka分区分组的作用

清空topickafka-topics.sh --bootstrap-server localhost:9092 --delete --topic second创建分区kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 3 --topic second发kafka-console-producer.sh --bootstrap-server localhos…

有关链表算法

例题一 解法&#xff08;模拟&#xff09;&#xff1a; 算法思路&#xff1a; 两个链表都是逆序存储数字的&#xff0c;即两个链表的个位数、⼗位数等都已经对应&#xff0c;可以直接相加。 在相加过程中&#xff0c;我们要注意是否产⽣进位&#xff0c;产⽣进位时需要将进位…

Visual Studio 2022报错c1083,win11解决办法

如果头文件报错&#xff0c;并且编译器报错是c1083&#xff0c;无法处理的时候&#xff0c;包括卸载重装也是无济于事的时候 此时可以采取一下办法进行修改 出现这个的主要原因是安装 Windows SDK 时版本出错&#xff0c;需要根据自己的 windows 版本选择安装对应版本的 Wind…

网心云邀请码:KpyV3Dk7

网心云长期有效邀请码&#xff1a;KpyV3Dk7 新用户注册福利码&#xff1a;KpyV3Dk7 通过福利码注册并登录您可获得&#xff1a;①可得1元收益②1张14天50%加成卡③绑定设备可得1~5元不等 新手解答&#xff1a; 1. 有哪些设备可以安装&#xff1f;闲置电脑、闲置手机、闲置平…

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

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