【python_爬虫】【代理池辅助接口】连接爬虫部分代码和IP代理池的辅助桥梁模块

在爬虫的过程中若爬取速度过快可能会导致IP地址被封,短时间内无法再去访问想要爬取的网站信息内容。

这时候我们就要去代理池模块中调取代理,若出现再次被封的情况再去从代理池中获取新的代理,如此循环。

但如果每次爬虫都要复写一段这样的调取代码,那为什么不做成一个模块后期使用引入呢?代理池辅助接口便由此诞生

思路:

根据前面分析该类中需有以下三种方法:

1.连接代理池,从代理池中把可用的IP代理地址以列表形式存储起来;

2.获取代理列表的首个代理作为初始代理IP;

3.检测到当前代理失效或者被封无法返回信息时剔除该代理,并从列表中读取下一个IP作为代理进行爬虫

在这边值得注意的是如果检测到代理列表为空,也就是代理都用完了,就再去调用连接代理池获取IP代理地址的模块,重新生成新的代理池,这样也就形成了一个闭合环,程序能够无限循环不中断。

具体代码如下:

#导入IP代理池获取IP模块
from ip_pool import IP_Pool


class ProxyHelper(object):
    IP_poll = []
    #列表当前索引
    poll_index = 0
    def __init__(self):
        self.get_proxy_from_ip_pool()
        #初始化代理IP地址
        self.proxy = self.IP_poll[self.poll_index]

    #得到代理IP地址
    def get_proxy(self):
        print('当前使用的IP是:'+self.proxy)
        return self.proxy

    #更新代理IP地址
    def update_proxy(self):
        #移除当前被封IP
        self.IP_poll.remove(self.IP_poll[self.poll_index])
        #判断IP列表是否为空
        if len(self.IP_poll):
            self.proxy = self.IP_poll[self.poll_index]
        else:
            self.get_proxy_from_ip_pool()
            self.proxy = self.IP_poll[self.poll_index]

    #从ip_pool接口得到可用IP地址列表
    def get_proxy_from_ip_pool(self):
        self.IP_poll = IP_Pool().ip_pool_func()


if __name__ == '__main__':
    ProxyHelper().update_proxy()

关于获取测试代理ip可以跳转至下面这个博文 :

https://blog.csdn.net/weixin_44354777/article/details/100803598

补充:多进程在Windows下运行必须从Main函数开始(if __name__ == '__main__'),否则会报错。

建议处理方式:在 scrapy 中 建立 run xx.py 中 scrapy crawl py文件名 上面先跑一遍代理池 (用多进程写的) 不会报错

你可能感兴趣的:(python_爬虫)