突破反爬虫的利器——开源IP代理池
时间:2022-04-25
本文章向大家介绍突破反爬虫的利器——开源IP代理池,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
专栏作者简介
七 夜
信息安全研究人员,比较擅长网络安全、逆向工程、Python爬虫开发、Python Web开发。
博客园:http://cnblogs.com/qiyeboy/
CSDN:http://blog.csdn.net/qiye_/
Github:https://github.com/qiyeboy/
突破反爬虫的一个常用做法是使用代理IP,可以是作为初学者或者个人来说,买一些代理ip成本稍微高一些,因此最近写了一个开源项目IPProxys,用来为个人提供代理ip。
IPProxys原理:通过爬取各大代理网站提供的免费IP,进行去重,并验证ip的可用性,将有效的ip存储到sqlite中,并提供一个HTTP接口供爬虫程序获取ip。
IPProxys项目已经上传到github中,链接为https://github.com/qiyeboy/IPProxys。下面对整个项目工程进行一下说明,如下图所示:
- api包:主要是实现http服务器,提供api接口(通过get请求,返回json数据)
- data文件夹:主要是数据库文件的存储位置和qqwry.dat(可以查询ip的地理位置)
- db包:主要是封装了一些数据库的操作
- spider包:主要是爬虫的核心功能,爬取代理网站上的代理ip
- test包:测试一些用例,不参与整个项目的运行
- util包:提供一些工具类。其中的IPAddress.py查询ip的地理位置
- validator包:用来测试ip地址是否可用
- config.py:主要是配置信息(包括配置ip地址的解析方式和数据库的配置)
整个项目的代码量不大,大家可以根据自己的需求进行修改,也可以提出自己的想法和建议帮助我改进这个项目。
如何使用IPProxys项目呢?
1.将项目目录clone到当前文件夹
$ git clone
2.切换工程目录
$ cd IPProxys
3.运行脚本
python IPProxys.py
windows上运行效果如下图所示:
项目依赖项:
- 需要安装sqlite数据库
- 安装requests库:pip install requests
- 安装lxml: apt-get install python-lxml
当IPProxys运行起来后,外部的爬虫如何获取ip呢? 外部的爬虫只需要向IPProxys所在主机的8000端口发送GET请求即可。GET请求的参数为:
例如:
访问http://127.0.0.1:8000/?types=0&count=5&country=中国这个链接的含义是获取5个ip地址在中国的高匿代理。响应为JSON格式,返回数据为:[{"ip": "220.160.22.115", "port": 80}, {"ip": "183.129.151.130", "port": 80}, {"ip": "59.52.243.88", "port": 80}, {"ip": "112.228.35.24", "port": 8888}, {"ip": "106.75.176.4", "port": 80}]
一般爬取到的有效ip大约有60个左右,基本上满足个人的需要。
- Android查缺补漏(View篇)--自定义View利器Canvas和Paint详解
- Android查缺补漏(View篇)--自定义 View 的基本流程
- CVPR2018: Unsupervised Cross-dataset Person Re-identification by Transfer Learning of Spatio-tempora
- 一个数据包消灭一台服务器的DNS漏洞
- java文件基本操作与实例
- 如何在Azkaban中安装HDFS插件以及与CDH集成
- CVE-2017-5123 漏洞利用全攻略
- sqlmap被ban了ip怎么办
- 毫秒级检测!你见过带GPU的树莓派吗?
- 达观数据对AngularJS技术的思考与实践
- hadoop配置文件
- 推荐一款src自动化扫描和收集的工具
- 蓝桥杯:兰顿蚂蚁
- 蓝桥杯:矩阵翻硬币
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- vue-element-admin 上传upload图片慢问题处理
- Centos8 下安装最新 OpenCV4.3
- Golang之rpc框架rpcx
- gin websocket 一对一聊天
- Go 中文和unicode字符之间转换
- Go 加密解密算法总结
- Linux 中几个正则表达式的用法
- embedded.AnnotationConfigEmbeddedWeb ApplicationContext@1e67b872 has been closed already
- Js实现list导出为excel表格
- 宿舍(寝室)管理系统设计与实现(SSM框架 附 详细系统搭建教程、系统演示地址、实现过程、源码)
- Redis get key error
- elastic search 日志不打印问题(root用户惹的祸)
- 起飞 | 应用YOLOV4 - DeepSort 实现目标跟踪
- 如何将elastic search 的健康状态由红色red变为绿色green
- 拥抱K8s系列-01