之前做的代理池,最近有需要,又用了起来,但是,emmm… 所以重构了下,可用性还是很高的。
临时API:http://94.191.42.63:9090/random
源代码
app: web服务
conf: 全局配置
db: redis数据操作
log: 日志文件目录
manager: 代理调度管理
proxy: 代理抓取与格式化
util: 日志,网页请求,网页处理
run.py: 主函数
|
|
使用
1、启动任务
2、启动webserver
源代码公众号回复“代理” 获取
优化
1. 延迟计算
你想将一个只读属性定义成一个property,并且只在访问的时候才会计算结果。 但是一旦被访问后,你希望结果值被缓存起来,不用每次都去计算。
对应此程序的爬取代理的多个函数
|
|
2. 单例模式
如果在程序运行期间,有很多地方都需要使用配置文件的内容,也就是说,很多地方都需要创建 AppConfig 对象的实例,这就导致系统中存在多个 AppConfig 的实例对象,而这样会严重浪费内存资源 。事实上,类似 AppConfig 这样的类,我们希望在程序运行期间只存在一个实例对象。
对应此程序的数据库的操作
|
|
3. Webserver
Gunicorn是一个Python WSGI HTTP Server。gunicorn可以直接使用命令行gunicorn进行调用,也可以在python中构建Application进行使用。
|
|
4. 自动返回Json响应
API接口通常返回的是Json, 如果每个返回Json的路由都需要这样处理,那么对接口数量众多的的API来说重复工作就太多了。
|
|
5. 任务调度
APScheduler
是一个python的第三方库,用来提供python的后台程序。包含四个组件,分别是:
- triggers: 任务触发器组件,提供任务触发方式
- job stores: 任务商店组件,提供任务保存方式
- executors: 任务调度组件,提供任务调度方式
- schedulers: 任务调度组件,提供任务工作方式
|
|
输出:
|
|