爬虫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函数强制 ...