爬虫新利器:揭秘Github火爆的开源IP代理池秘密!

「往期精彩文章:」

遇到网页爬取、漏洞挖掘或渗透测试时,常常碰到请求被拦截的烦恼,导致任务中断。而为了继续发送请求数据,代理池技术应运而生。它就像一个神奇的「池子」,只需请求代理池,就能得到一个代理IP地址。如果你的IP被拦截,别急,可以随机换成另一个代理IP地址,轻松继续完成访问请求。今天,就让我们一起来简单了解一下IP代理池的安装与使用,掌握隐藏IP的小技巧,「记得关注公众号,不要错过更多精彩内容」

最近在GitHub上发现了一个十分优秀的项目,名为proxy_pool[1]的免费代理池工具。该项目完全开源,一直有着积极的开发者维护,活跃度也相当高。

项目介绍

proxy_pool项目采用Python语言开发,主要实现了以下功能:

  • 定时抓取免费代理网站,具有简易可扩展性。
  • 使用Redis对代理进行存储,并对代理的可用性进行排序。
  • 定时进行测试和筛选,清除不可用的代理,保留可用的代理。
  • 提供代理API,可以随机获取经过测试的可用代理。

目前,该项目已经斩获了5.3K颗星(GitHub Star),受到广泛关注和认可。

部署方式

您可以通过两种方式来运行代理池。一种方式是使用Docker(推荐),另一种方式是通过常规方式运行。具体要求如下:

Docker

如果使用 Docker,则需要安装如下环境:

  • Docker
  • Docker-Compose

安装方法自行搜索即可。 官方 Docker Hub 镜像:germey/proxypool[2]

常规方式

常规方式要求有 Python 环境、Redis 环境,具体要求如下:

  • Python>=3.6
  • Redis

Docker 运行

如果已经安装好了DockerDocker-Compose,只需一条命令即可轻松运行。

docker-compose up

运行结果类似如下:

redis        | 1:M 19 Feb 2020 17:09:43.940 * DB loaded from disk: 0.000 seconds
redis | 1:M 19 Feb 2020 17:09:43.940 * Ready to accept connections
proxypool | 2020-02-19 17:09:44,200 CRIT Supervisor is running as root. Privileges were not dropped because no user is specified in the config file. If you intend to run as root, you can set user=root in the config file to avoid this message.
proxypool | 2020-02-19 17:09:44,203 INFO supervisord started with pid 1
proxypool | 2020-02-19 17:09:45,209 INFO spawned: 'getter' with pid 10
proxypool | 2020-02-19 17:09:45,212 INFO spawned: 'server' with pid 11
proxypool | 2020-02-19 17:09:45,216 INFO spawned: 'tester' with pid 12
proxypool | 2020-02-19 17:09:46,596 INFO success: getter entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
proxypool | 2020-02-19 17:09:46,596 INFO success: server entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
proxypool | 2020-02-19 17:09:46,596 INFO success: tester entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)

可以看到 Redis、Getter、Server、Tester 都已经启动成功。 这时候访问http://localhost:5555/random 即可获取一个随机可用代理。

当然你也可以选择自己 Build,直接运行如下命令即可:

docker-compose -f build.yaml up

使用

成功运行之后可以通过http://localhost:5555/random 获取一个随机可用代理。

可以用程序对接实现,下面的示例展示了获取代理并爬取网页的过程:

import requests

proxypool_url = 'http://127.0.0.1:5555/random'
target_url = 'http://httpbin.org/get'

def get_random_proxy():
"""
get random proxy from proxypool
:return: proxy
"""

return requests.get(proxypool_url).text.strip()

def crawl(url, proxy):
"""
use proxy to crawl page
:param url: page url
:param proxy: proxy, such as 8.8.8.8:8888
:return: html
"""

proxies = {'http': 'http://' + proxy}
return requests.get(url, proxies=proxies).text


def main():
"""
main method, entry point
:return: none
"""

proxy = get_random_proxy()
print('get random proxy', proxy)
html = crawl(target_url, proxy)
print(html)

if __name__ == '__main__':
main()

运行结果如下:

get random proxy 116.196.115.209:8080
{
"args": {},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.22.0",
"X-Amzn-Trace-Id": "Root=1-5e4d7140-662d9053c0a2e513c7278364"
},
"origin": "116.196.115.209",
"url": "https://httpbin.org/get"
}

可以看到成功获取了代理,并请求 httpbin.org 验证了代理的可用性。

写到最后

在网络数据获取和安全测试中,代理池是一个非常有用的工具,能够帮助用户有效地管理和利用代理资源,提高工作效率。通过本文的介绍,希望您对代理池的原理和使用有了更深入的了解。无论是对于开发者还是安全工程师来说,掌握代理池的使用技巧都将成为您工作中的利器。

Reference

[1]

proxy_pool: https://github.com/Python3WebSpider/ProxyPool

[2]

germey/proxypool: https://hub.docker.com/r/germey/proxypool


相关推荐

  • 最新爆料!GPT-5已有客户上手体验:性能惊人,或将在夏天发布
  • 做实验没 GPU 机器,还记得导师爆出最脏的一句话是什么?
  • 破解大模型安全难题,360推出大模型安全能力框架
  • 联合国通过首个全球AI决议;曝微软6.5亿美元买下Inflection AI员工;联想首款AI PC下月发布丨AIGC大事日报
  • 微软深夜首推AI PC!新AI功能戳中打工人,月减10小时工作量
  • 突发:拜登对苹果下狠手,令市值暴跌6700亿,苹果强硬回应“不妥协”!
  • 换掉ES!Redis官方搜索引擎来了,效率大幅提升
  • 沉寂 600 多天后,React 憋了个大招
  • Vue 团队正式开源 Rolldown
  • 为什么阿里不推荐使用 keySet() 遍历HashMap?
  • 新零售SaaS架构:线上商城系统架构设计
  • 别做老实人了!这才是 HR 喜欢听的离职原因!
  • Vite为什么快呢?快在哪?说一下我自己的理解吧
  • Vue 的 style 加了 scoped 也会样式冲突?可怕!
  • 我真服了!媳妇刚发3.8万年终奖,就要拿出四十万还房贷,说她不愿给银行付利息。可我觉得不应该提前还房贷。
  • 5个9可用性如何实现?图解业务系统健康度检查
  • Bruno - 开源IDE,用于探索和测试API
  • 阿里限流神器Sentinel夺命连环 16 问?
  • 生存分析是什么?手动和使用R的示例
  • 全球最强大模型一夜易主,GPT-4时代终结!Claude 3一夜颠覆AI界!