❝「往期精彩文章:」
❞
- IP地址无所遁形!试试这个3k星热门开源查询神器
- 服务器监控新利器:ServerBee带你看透服务器运行状态
- 画出你的想法:体验Excalidraw的魅力,完全免费的绘图工具!
- 马斯克兑现承诺,Grok模型携3140亿参数强势开源,商业用途全免费!
- 解锁正则表达式的秘密:regex-vis工具带你看见模式匹配的魔法!
❝遇到网页爬取、漏洞挖掘或渗透测试时,常常碰到请求被拦截的烦恼,导致任务中断。而为了继续发送请求数据,代理池技术应运而生。它就像一个神奇的「池子」,只需请求代理池,就能得到一个代理IP地址。如果你的IP被拦截,别急,可以随机换成另一个代理IP地址,轻松继续完成访问请求。今天,就让我们一起来简单了解一下IP代理池的安装与使用,掌握隐藏IP的小技巧,「记得关注公众号,不要错过更多精彩内容」!
❞
最近在GitHub上发现了一个十分优秀的项目,名为proxy_pool[1]的免费代理池工具。该项目完全开源,一直有着积极的开发者维护,活跃度也相当高。
proxy_pool项目采用Python语言开发,主要实现了以下功能:
目前,该项目已经斩获了5.3K颗星(GitHub Star),受到广泛关注和认可。
您可以通过两种方式来运行代理池。一种方式是使用Docker(推荐),另一种方式是通过常规方式运行。具体要求如下:
如果使用 Docker,则需要安装如下环境:
安装方法自行搜索即可。 官方 Docker Hub 镜像:germey/proxypool[2]
常规方式要求有 Python 环境、Redis 环境,具体要求如下:
如果已经安装好了Docker
和Docker-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 验证了代理的可用性。
在网络数据获取和安全测试中,代理池是一个非常有用的工具,能够帮助用户有效地管理和利用代理资源,提高工作效率。通过本文的介绍,希望您对代理池的原理和使用有了更深入的了解。无论是对于开发者还是安全工程师来说,掌握代理池的使用技巧都将成为您工作中的利器。
proxy_pool: https://github.com/Python3WebSpider/ProxyPool
[2]germey/proxypool: https://hub.docker.com/r/germey/proxypool