请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

设置IP代理爬取知乎被拒绝连接

https://img1.sycdn.imooc.com//szimg/5b0c1fc100010bbf12690232.jpg

class proxyMiddleware(object):
    def process_request(self , request , spider):
        iptype = re.match("https|http" , request.url).group()
        proxy_ip = self.get_random_ip(iptype)
        proxy_user_pass = "18520864631:150145lqfli"
        encoded_user_pass = base64.b64encode(proxy_user_pass.encode(encoding='utf-8')).decode()
        request.meta["proxy"] = proxy_ip
        request.headers['Proxy-Authorization'] = 'Basic ' + encoded_user_pass

    def process_response(self , request , response , spider):
        #处理response
        if response.status != 200 :
            iptype = re.match("https|http", request.url).group()
            proxy_ip = self.get_random_ip(iptype)
            request.meta["proxy"] = proxy_ip
            return request
        return response

    def get_random_ip(self , type):
        with open("proxy_ip.txt" , "r") as rf:
            ip_str = rf.read()
        ip_list = ip_str.split(',')
        ip_list_http = []
        ip_list_https = []
        for ip in ip_list:
            if ip.startswith("http://"):
                ip_list_http.append(ip)
            elif ip.startswith("https://"):
                ip_list_https.append(ip)
        if type == "http":
            ip = random.choice(ip_list_http).strip()
            return ip
        else:
            ip = random.choice(ip_list_https).strip()
            return ip


正在回答 回答被采纳积分+3

1回答

bobby 2018-06-01 10:36:28

是后续所有的访问都会这样 还是某一个url会出现这种情况呢

0 回复 有任何疑惑可以回复我~
  • 提问者 慕设计9544645 #1
    大多数情况是第一个start_request就提示连接失败,不过偶尔会出现提交question_url时返回200 , 但到了请求answer时就又提示连接失败了,这应该是西刺上的IP代理可用率低的原因吧
    回复 有任何疑惑可以回复我~ 2018-06-01 11:44:49
  • bobby 回复 提问者 慕设计9544645 #2
    对 西刺的ip代理可用性很低,建议使用收费代理
    回复 有任何疑惑可以回复我~ 2018-06-04 09:48:14
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信