Linux搭建爬虫ip与私有IP池教程

前一篇文章主要将了有关linxu系统部署爬虫系统的具体操作流程,但是在我们高并发多线程获取数据的时候,同一个ip地址必定会被封禁,在遵守网站爬取规则的同时,合理使用爬虫ip才能有效的规避封IP风险,下面我将以linux系统搭建爬虫ip以及建立公司的私有ip池,让爬虫效率更高。

在Linux系统上搭建爬虫ip并建立私有IP池,具体的几个步骤我写在下面。我这里提供两种主流方案:使用Squid代理服务器(适合自有多IP服务器) 和 搭建代理池(如ProxyPool,整合免费/付费代理)。

方案一:使用Squid搭建多IP出口代理(适合自有多个公网IP)

适用场景:你的服务器有多个公网IP(例如VPS商家支持多IP绑定)。

步骤:

1、添加多个IP地址

编辑网络配置(以eth0为例):

bash 复制代码
sudo nano /etc/network/interfaces

添加多个IP(假设主IP为192.0.2.1,新增192.0.2.2):

conf 复制代码
auto eth0
iface eth0 inet static
  address 192.0.2.1
  netmask 255.255.255.0
  gateway 192.0.2.254

# 添加额外IP
auto eth0:0
iface eth0:0 inet static
  address 192.0.2.2
  netmask 255.255.255.0

重启网络:

bash 复制代码
sudo systemctl restart networking

2、安装Squid代理

bash 复制代码
sudo apt update && sudo apt install squid -y

3、配置Squid使用多IP出口

编辑配置文件:

bash 复制代码
sudo nano /etc/squid/squid.conf

修改以下内容:

conf 复制代码
# 监听3128端口
http_port 3128

# 允许所有客户端访问(生产环境应限制IP)
http_access allow all

# 定义IP轮询规则(关键!)
tcp_outgoing_address 192.0.2.1 all
tcp_outgoing_address 192.0.2.2 all
# 添加更多IP...

4、重启Squid生效

bash 复制代码
sudo systemctl restart squid

5、测试代理

使用curl验证出口IP:

bash 复制代码
curl --proxy http://你的服务器IP:3128 http://ipinfo.io/ip

多次执行应轮询显示不同IP。

方案二:搭建爬虫ip池(整合免费/付费代理)

适用场景 :整合网络上的免费代理或付费代理API,构建统一代理池。

推荐工具:ProxyPool(Python开源项目)

步骤:

1、安装依赖

bash 复制代码
sudo apt update
sudo apt install redis-server python3-pip git -y

2、下载ProxyPool

bash 复制代码
git clone https://github.com/jhao104/proxy_pool.git
cd proxy_pool

3、安装Python依赖

bash 复制代码
pip install -r requirements.txt

4、配置Redis

启动Redis服务:

bash 复制代码
sudo systemctl start redis

5、修改配置文件

编辑setting.py

python 复制代码
# 配置Redis(默认即可)
DB_CONN = 'redis://127.0.0.1:6379/0'

# 自定义代理来源(示例:免费代理网站)
PROXY_SOURCES = [
    "http://www.proxysources.net",
    # 添加更多代理源或付费API
]

6、启动代理池

  • 调度程序(获取/验证代理):

    bash 复制代码
    python3 proxyPool.py schedule &
  • API服务(提供代理接口):

    bash 复制代码
    python3 proxyPool.py webserver &

7、使用代理池

  • 获取一个代理:

    bash 复制代码
    curl http://localhost:5010/get/

    返回格式:{"proxy":"1.2.3.4:8080"}

  • 使用代理示例(Python):

    python 复制代码
    import requests
    proxy = requests.get("http://localhost:5010/get/").json()['proxy']
    response = requests.get("https://ipinfo.io/ip", proxies={"http": f"http://{proxy}"})
    print(response.text)  # 显示当前出口IP

私有IP池管理建议

1、代理来源

  • 免费代理:从公开网站爬取,但稳定性差。
  • 付费代理:购买高质量代理服务,通过API集成到ProxyPool。
  • 自建代理:结合方案一,将多个Squid服务器IP加入ProxyPool。

2、代理验证

  • ProxyPool自动验证代理可用性(默认测试httpbin.org)。
  • 自定义验证URL:修改setting.py中的TEST_URL

3、扩展性

  • 部署多个ProxyPool节点,用Nginx做负载均衡。
  • 添加认证:在ProxyPool的API层增加账号密码验证。

4、监控维护

  • 日志:监控logs/目录下的日志文件。
  • 自动化:用cron定期重启调度脚本。

常见问题解决

  • Squid无法使用多IP :检查IP是否绑定成功(ip addr show),防火墙是否开放3128端口。
  • ProxyPool无代理:检查代理源是否有效,Redis是否运行。
  • 代理速度慢:优先使用付费代理或优化代理源。

上面两种方案都可行,都可以在Linux上快速搭建灵活的爬虫ip池,满足爬虫、数据采集等需求,具体可以根据自身项目需求选择更合适的爬虫ip池方案。

相关推荐
czhc11400756639 分钟前
Linux 76 rsync
linux·运维·python
蓝易云1 小时前
Qt框架中connect()方法的ConnectionType参数使用说明 点击改变文章字体大小
linux·前端·后端
花落已飘2 小时前
多线程 vs 异步
linux·网络·系统架构
K哥爬虫2 小时前
【APP逆向百例】某品会 app 逆向分析
爬虫
PanZonghui2 小时前
Centos项目部署之Nginx部署项目
linux·nginx
码出钞能力3 小时前
linux内核模块的查看
linux·运维·服务器
星辰云-3 小时前
# Linux Centos系统硬盘分区扩容
linux·运维·centos·磁盘扩容
聽雨2374 小时前
02每日简报20250704
linux·科技·金融·生活·社交电子·娱乐·媒体
Maki Winster4 小时前
Peek-Ubuntu上Gif录制工具-24.04LTS可装
linux·ubuntu·peek
qq_171538854 小时前
TCP/IP协议精解:IP协议——互联网世界的邮政编码系统
网络·网络协议·tcp/ip