做了一个分布式的爬虫爬取知乎用户信息,将一个slave端放在了阿里云服务器上,爬了一个小时后提示“ip访问频繁,请进行验证用于确认这些请求不是自动发出的“。
原来是爬的太快了,被知乎发现了,要求输入验证码,类似以下
一般的图片验证码,可以用云打码或保存本地识别后再发送post请求之类的,这种拖动滑块验证码在无界面的centos系统上就很难受了。
研究了半天终于找到了解决方案:将阿里云服务器作为代理服务器,本地浏览器使用代理ip登陆知乎,完成验证,ip解除禁止。
使用squid:
安装:yum install squid
配置:
1.vi /etc/squid/squid.conf, 在结尾处追加:
dns_nameservers 8.8.8.8
http_port 8000
http_access allow all
cache_mem 60 MB
2.注释掉默认的http_access deny all
创建squid交换目录:
cd /usr/sbin/
./squid -z
启动squid、查看端口状态:
./squid
netstat -ntl
停止squid:
./squid -k shutdown
此时,将浏览器的代理IP设置为你服务器的IP,端口设置成上面的8000,使用chrome直接设置代理会不管用,这里选择用selenium
from seleniumimport webdriver
chromeOptions = webdriver.ChromeOptions()
chromeOptions.add_argument("--proxy-server=http://服务器ip:8000")
url= 'https://www.zhihu.com'
driver = webdriver.Chrome(chrome_options = chromeOptions)
driver.get(url)
time.sleep(60)
等网页打开滑动进行验证,此时ip已经解除限制了。
访问百度查看ip也可以看到IP是阿里云的
网友评论