Centos作为代理服务器为Scrapy爬虫提供代理服务
在我之前的文章Scrapy-redis分布式爬虫+Docker快速部署中,主要是介绍了分布式和Docker
的使用,但爬虫在正常爬取中还是遭遇了ban IP......所以就得搞代理了.
由于2亿的数据已经跑了7000w了才被ban的IP,所以我觉得是因为对方发现了这不正常的请求(每秒400次左右,而且是同一个IP发出),再怎么也会觉得不正常,果然还是没逃过被ban的命运,当时想了以下几个方案.由于要爬的网站是国外的,是被墙的,所以国内那些免费的IP池都没法用,只能找国外的,但是找了一圈没找到合适的,所以有以下几个方案
- 在
vultr
开5刀的机器,用来做代理服务器 - 用信用卡去撸
aws
- 用
crawlera
第1、2的方案其实都差不多,毕竟vultr
和aws
都是可以删机器换IP的,但是vultr
要花钱,但按使用时间算,其实也用不了多少钱,aws
呢可以撸个免费的.
第3种crawlera
倒是最省事的,但是价格实在太贵
按这个价格,我再爬一亿数据5000$都搞不下来
由于用信用卡去撸 aws
过程也烦,所以直接在vultr
上开了台5$机器用来做代理了.
代理需要使用的工具
1、Centos
服务器一台(Ubuntu
也可)
2、TinyProxy
步骤
用ssh链接上服务器安装TinyProxy
命令:yum install tinyproxy
Ubuntu
用apt
即可
安装好后修改conf
文件
路径在/etc/tinyproxy.conf
Port 8888 #预设是8888 Port,你可以更改
Allow 127.0.0.1 #将127.0.0.1改成你自己的IP
#例如你的IP 是1.2.3.4,你改成Allow 1.2.3.4,那只有你才可以连上这个Proxy
#若你想任何IP都可以脸到Proxy在Allow前面打#注释
打开端口
iptables -A INPUT -p tcp --dport 8888 -j ACCEPT
注意:这样做了之后,你可能照样连不上,因为防火墙没关,使用命令将防火墙关闭
systemctl stop firewalld.service
然后去你的服务器里使用curl命令试试能否连接
curl -x xxx.xxx.xxx.xxx:8888 www.baidu.com
看看能否请求成功,如果可以,代理则启动成功.
然后就是给爬虫加个middleware
的事了
class ProxyMiddleware(object):
def process_request(self, request,spider):
request.meta['proxy'] = 'http://149.28.xxx.xxx:8889'
然后在setting
中使用
DOWNLOADER_MIDDLEWARES = {
'vmoredis.middlewares.ProxyMiddleware':540,
}
重新开启爬虫,完事.等到被ban了,在换个IP继续爬.
如果哪位有免费的国外IP代理求推荐.想拿来做代理池.万分感谢
文章中有错误希望大家指出,有问题欢迎私信