爬虫ip池能改变ip的原理

原理

1、存储模块使用Redis的有序集合来表示dialing的去重和状态。

同时也是中心模块和基础模块,连接其他模块。

2、获取模块定期从代理网站获取代理。

将获取的代理传输到存储模块并保存到数据库中。

3、检测模块定期从存储模块获取所有代理。

并检测代理,根据不同的检测结果为代理设置不同的标识。

4、接口模块通过WebAPI连接服务接口。

接口连接数据库,以Web的形式返回可用代理。

实例

from multiprocessing import Process
import time
from api import app
from getter import Getter
from tester import Tester
TESTER_CYCLE = 20
GETTER_CYCLE = 20
TESTER_ENABLED = True
GETTER_ENABLED = True
API_ENABLED = True
class Scheduler():
    """调度模块"""
    def schedule_tester(self, cycle=TESTER_CYCLE):
        """
        定时测试代理
        :param cycle:
        :return:
        """
        tester = Tester()
        while True:
            print("测试器开始运行")
            tester.run()
            time.sleep(cycle)
    def schedule_getter(self, cycle=GETTER_CYCLE):
        """
        定时获取代理
        :param cycle:
        :return:
        """
        getter = Getter()
        while True:
            print("开始抓取代理")
            getter.run()
            time.sleep(cycle)
    def schedule_api(self):
        """
        开启api
        :return:
        """
        app.run()
    def run(self):
        print("代理池开始运行")
        if TESTER_ENABLED:
            test_process = Process(target=self.schedule_tester)
            test_process.start()
        if GETTER_ENABLED:
            getter_process = Process(target=self.schedule_getter)
            getter_process.start()
        if API_ENABLED:
            api_process = Process(target=self.schedule_api)
            api_process.start()
if __name__ == '__main__':
    a = Scheduler()
    a.run()

reload在python中的使用:说明1、使用前提是reload函数重新导入的模块在使用import或from之前已经成功导入。否则reload函数无法生效,导入是一项昂贵的操作。module必须是成功导入的模块。2、reload函数强制 ...