pyspider配置带验证的squid代理池
就是这样的:
crawl_config = {
"proxy":"用户名:密码@你的代理池ip:6666"
}
首先要安装squid(centos下)
yum install -y squid
作者都推荐squid,那么就用吧~
添加squid的用户验证
htpasswd -c /etc/squid/passwd 用户名
根据提示输入两次密码
如果找不到htpasswd, 执行
yum install httpd
然后继续上一步。
然后根据这个配置文件覆盖/etc/squid/squid.conf文件
http_port 6666 #对外公布的端口
#缓存大小
cache_mem 128 MB
maximum_object_size 16 MB
cache_dir ufs /var/spool/squid 100 16 256
access_log /var/log/squid/access.log
auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/passwd #指定认证程序以及账户文件
#auth_param basic children 50 #同时连接的客户端数量
# 定义端口
acl Safe_ports port 80 # http
acl SSL_ports port 443
acl CONNECT method CONNECT
acl auth_user proxy_auth REQUIRED
# 拒绝所有非定义的端口
http_access deny !Safe_ports
http_access allow auth_user
# 拒绝所有非定义的端口
http_access deny CONNECT !SSL_ports
http_access deny all
via off
forwarded_for delete
#forwarded_for off
#文件最后加上 高匿配置
request_header_access X-Forwarded-For deny all
request_header_access From deny all
request_header_access Via deny all
follow_x_forwarded_for deny all
request_header_access Referer deny all
request_header_access User-Agent deny all
cache_peer 115.213.238.102 parent 35759 0 no-query weighted-round-robin weight=1 connect-fail-limit=2 allow-miss max-conn=5 name=115.213.238.10220
never_direct allow all
其中这里就是你可用的http 代理ip列表
cache_peer 115.213.238.102 parent 35759 0 no-query weighted-round-robin weight=1 connect-fail-limit=2 allow-miss max-conn=5 name=115.213.238.10220
网上免费的质量都不高,有银子的建议买收费的~
如果你使用的是pyspider的话,还可以直接建立一个任务,定时爬取某个免费的代理列表。然后通过任务定时生成squid.conf文件。
以下是代码片段,大家参考一下
先复制一份squid.conf.example当做模板。可以参考如下代码:
cd /etc/squid
mv squid.conf.default squid.conf.example
以下是更新conf的代码:
proxy_list = response.json['msg']#获取到的ip列表
default_conf = open('/etc/squid/squid.conf.example' , 'r').read()#读取模板文件
default_conf += '\n'
for index in range(len(proxy_list)):#把ip定制成指定格式
ip, port = proxy_list[index]['ip'], proxy_list[index]['port']
proxy_conf = "cache_peer " + ip + " parent " + str(port) + " 0 no-query weighted-round-robin weight=2 connect-fail-limit=2 allow-miss max-conn=5 name=proxy-" + str(index) + "\n"
default_conf += proxy_conf
default_conf += '\n never_direct allow all'
conf = open('/etc/squid/squid.conf' , 'w')#存储文件
conf.write(default_conf)
conf.close()
message = os.system('systemctl restart squid')
--------------