缘由
由于爬虫的需要,仅仅使用购买的动态ip无法满足特定的采集需求,比如有的网站需要先通过滑块验证等手段验证你的IP,只有通过验证的IP网站才认为是正常的IP,并且验证通过后,如果访问过多,又会把你的IP封掉。碰到这种情况,我们可以使用拨号服务器来动态拨号搭建代理池,先在网站上把IP验证通过,再利用通过验证的IP对网站进行采集。如果IP被封从代理池删除掉,重新拨号验证就行。这种方式既能保证高度可用,又可以实现自由控制拨号切换。
如何搭建拨号代理池
有很多卖拨号服务器的网站,一般联系客服充值购买就行,一台一个月100元左右。这些服务器上面一般都给配置好了拨号命令:
- adsl-start 拨号获得新的IP
- adsl-stop 断开拨号
- adsl-status 拨号连接状态
我们可以写一个脚本来定时执行这些命令就可以拨号产生代理IP了,当然脚本需要我们自己写。
配置拨号服务器
拨号服务器利用adsl-start命令拨号成功获得的IP并不能直接被我们拿来使用,我们需要安装Squid或者TinyProxy代理服务软件。
- TinyProxy比较小众,虽然没有Squid的功能丰富,但是小巧简单,也能满足普通用户的需求。
- Squid 是一款优秀的代理软件,有很丰富的ACL管理功能,虽然squid很强大,但配置比较繁琐。
简单介绍squid的安装和使用:
-
安装命令:
yum install squid -y
。 如果缺少依赖项的话就按照提示,缺少什么安装什么。 -
配置squid.conf:
Squid的配置在/etc/squid/squid.conf下面,只需要改变下面几个配置即可:#允许的客户端ip #acl allcomputers src 0.0.0.0/0.0.0.0 #将http_access deny all注释或者删除 #http_access deny all http_access allow all http_port 12345
如果需要用户名密码认证,使用HTTPBasicAuth 的方式。 需要htpasswd工具来创建passwd文件 (安装Apache软件,此工具会附带安装, 或者使用 apt-get/yum install http-tools的方式安装此工具)
- 创建用户‘proxy_username’ 的命令如下:
htpasswd -c /etc/squid/passwd proxy_username
输入相应的密码后,生成 文件/etc/squid/passwd
- 将下述代码添加到/etc/squid/squid.conf 中即配置实用验证的功能:
auth_param basicprogram /usr/lib64/squid/basic_ncsa_auth /etc/squid/passwd acl auth_user proxy_auth REQUIRED http_access allow auth_user
在就是如果配置成高匿代理的话,可以添加一下配置
forwarded_for off request_header_access X-Forwarded-For deny all request_header_access Via deny all request_header_access All allow all
- 创建用户‘proxy_username’ 的命令如下:
-
关闭防火墙
systemctl stop firewalld systemctl disable firewalld systemctl enable squid.service
-
启动squid服务
squid -z squid -k parse systemctl start squid.service
通过以上步骤,拨号服务器上拨号获得的ip就可以被我们拿来放在代理中使用了。我们可以在每一台VPS服务器上部署一个脚本,来控制拨号,获得ip并把ip写入redis代理池中,爬虫从redis代理池中随机取ip就可以了。
最后,推荐一个可以批量控制多台服务器的工具:salt-ssh,是自动化运维软件SaltStack的组件,不需要安装master和minion ,用salt-ssh实现以上批量安装配置非常方便,否则,我们一台一台的配置,还不累死!