爬虫代理 IP 池及隧道代理(2022.05.24)

日常开发中,偶尔会遇到爬取网页数据的需求,为了隐藏本机真实 IP,常常会用到代理 IP 池,本文将基于 openresty 与代理 IP 池搭建更为易用的隧道代理。

1. 代理 IP 池

代理 IP 池即在数据库中维护一个可用的 IP 代理队列,一般实现思路如下:

import json

import requests
from retrying import retry

def get_proxy_ip() -> str:
    resp = requests.get(url="http://192.168.0.121:5010/get")
    assert resp.status_code == 200
    return f"http://{json.loads(resp.text)['proxy']}"

@retry(stop_max_attempt_number=5)
def proxy_test() -> None:
    resp = requests.get(url="http://httpbin.org/get", proxies={"http": get_proxy_ip()}, timeout=5)
    assert resp.status_code == 200
    print(f"origin: {json.loads(resp.text)['origin']}")

if __name__ == "__main__":
    try:
        proxy_test()
    except Exception as e:
        print(f"Error: {e}.")

2. 隧道代理

通过代理 IP 池实现了隐藏本机真实 IP,但每次需要通过 API 接口获取新的代理 IP,不太方便,所以出现了隧道代理。隧道代理内部自动将请求通过不同的代理 IP 进行转发,对外提供统一的代理地址。

此处笔者通过 openresty 配合上文搭建的代理 IP 池实现隧道代理。

openresty
├── conf.d
│   └── tunnel-proxy.stream
├── docker.sh
└── nginx.conf

通过 docker 启动 openresty,此处笔者为了方便,将 docker 命令保存成了 shell 文件,具体内容如下:

docker run --name openresty -itd --restart always \
-p 9870:9870 \
-v $PWD/nginx.conf:/usr/local/openresty/nginx/conf/nginx.conf \
-v $PWD/conf.d:/etc/nginx/conf.d \
-e LANG=C.UTF-8 \
-e TZ=Asia/Shanghai \
--log-driver json-file \
--log-opt max-size=1g \
--log-opt max-file=3 \
openresty/openresty:alpine

执行 bash docker.sh 命名启动 openresty,至此隧道代理搭建完成。

import json

import requests
from retrying import retry

proxies = {
    "http": "http://192.168.0.121:9870"
}

@retry(stop_max_attempt_number=5)
def proxy_test() -> None:
    resp = requests.get(
        url="http://httpbin.org/get", proxies=proxies,  timeout=5, )
    assert resp.status_code == 200
    print(f"origin: {json.loads(resp.text)['origin']}")

if __name__ == "__main__":
    try:
        proxy_test()
    except Exception as e:
        print(f"Error: {e}.")

参考链接:

Original: https://www.cnblogs.com/xiaoQQya/p/16305232.html
Author: Hit不死的小强
Title: 爬虫代理 IP 池及隧道代理(2022.05.24)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/810377/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球