scrapy设置代理ip池出现问题

class UserAgentMiddleware:
    def process_request(self,request,spider):
        request.headers.setdefault(b'User-Agent',choice(USER_AGENT))

class ChangeProxy:

    def __init__(self):
        '''
        初始化变量
        get_url 是请求的api
        temp_url 是验证的地址
        ip_list 是ip
        '''
        self.get_url = 'http://api.xdaili.cn/xdaili-api//greatRecharge/getGreatIp?spiderId=c7b4dc1d89bc461da66f043d2ea170fa&orderno=YZ20217168971sSXnSs&returnType=2&count=10'
        self.temp_url = 'http://httpbin.org/get'
        self.ip_list = []
        # 默认的是用来记录使用ip的个数,或者目前正在使用的是第几个ip,本程序,一次性获得了10个ip,所以count最大默认为10
        self.count = 0
        # 用来记录每个ip的使用次数,此程序,设置为最大使用3次换下一个ip
        self.evecount = 0

    def getIPDate(self):
        '''
        这部分是获得ip,并放入ip池(先清空原有的ip池0)
        :return:
        '''
        temp_data = requests.get(url=self.get_url).text
        self.ip_list.clear()
        for eve_ip in json.loads(temp_data)['RESULT']:
            print(eve_ip)
            self.ip_list.append({
                'ip': eve_ip['ip'],
                'port': eve_ip['port']
            })

    def changeProxy(self, request):
        '''
        修改代理ip
        :param request:对象
        :return:
        '''
        request.meta['proxy'] = 'http://' + str(self.ip_list[self.count-1]['ip']) + ':' + str(self.ip_list[self.count-1]['port'])
    def yanzheng(self):
        '''
        验证代理ip是否可以,默认超时5S
        :return:
        '''
        pass
        requests.get(url=self.temp_url,
                     proxies={'http':str(self.ip_list[self.count-1]['ip']) + ':' + str(self.ip_list[self.count-1]['port'])},
                     timeout=5)

    def ifUsed(self, request):
        '''
        切换代理ip的跳板
        :param request: 对象
        :return:
        '''
        try:
            self.changeProxy(request)
            self.yanzheng()
        except:
            if self.count == 0 or self.count == 10:
                self.getIPDate()
                self.count = 1
            self.count = self.count + 1
            self.ifUsed(request)

    def process_request(self, request, spider):
        if self.count == 0 or self.count == 10:
            self.getIPDate()
            self.count = 1

        if self.evecount == 3:
            self.count = self.count + 1
            self.evecount = 0

        else:
            self.evecount = self.evecount + 1
        self.ifUsed(request)

img

img

我在scrapy加入了代理ip池,爬取网站的时候为什么会出现301跳转?还有让ip池与splash结合啊,我现在直接报错503,这两个问题我弄了好几天,一直没搞懂

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 以帮助更多的人 ^-^