scrapy代理ip之使用动态转发IP设置
2019-02-21 本文已影响0人
越大大雨天
以阿布云提供的ip动态转发为例,在python3中接入随机动态ip只需要在middleware中添加如下代码:
import base64
# 代理服务器
proxyServer = "[http://http-dyn.abuyun.com:9020](http://http-dyn.abuyun.com:9020/)"
# 代理隧道验证信息
proxyUser="H01234567890123D" #用户名
proxyPass = "0123456789012345" #密匙
proxyAuth = "Basic" + base64.urlsafe_b64encode(bytes((proxyUser + ":" + proxyPass), "ascii")).decode("utf8")
class ProxyMiddleware(object):
def process_request(self,request,spider):
request.meta["proxy"] = proxyServer
request.headers["Proxy-Authorization"] = proxyAuth
在使用Basic认证的代理ip时,scrapy不同于python的requests包,这里不能直接把用户名和密码与代理ip放在一起。正确的做法是应该将验证消息加到headers的Proxy-Authorization中。
最后只需将ProxyMiddleware添加进settings的DOWNLOAD_MIDDLEWARES中即可。
注意根据ip请求限制设置DOWNLOAD_DELAY。
完美避开ip限制,动态转发ip价格便宜,可通过爬取规模来选择使用套餐。