Flask的一次巧妙应用

想起之前我遇到了这样的一个场景:有一套项目源代码,这个项目有个需求是实时更新数据,每间隔5分钟就要更新一次,数据是通过请求API来获取,但这些API所在的服务器在美国,而我们的应用服务器则在香港,通讯链路过长导致了每次更新数据都会延时。因为项目代码涉及到大量业务逻辑,并且任务要求在2天时间内完成,如果去改动项目,牵扯到的问题将不仅仅是解决数据更新延时那么简单,所以我们在尽量不改变原有项目代码的前提下,把数据更新延时的问题解决掉。
因为同样的数据在香港也有,并不一定要请求美国服务器,但是香港本地提供的数据在网页上,没有提供API。为了尽量提高数据更新的即时性,我们只能从香港服务器请求数据了。
看到这里,你会采用什么方法?
我采用的方法是:写好网络爬虫挂在本机,项目里请求API的路径改为本机的爬虫服务(这样就只需要改动那部分URL,不需要改动其它业务逻辑,出错概率大大减小),每请求一次爬虫就会解析一次数据页面并把数据返回给项目。这确实是个办法,但若要请求爬虫服务,肯定要有一套API请求地址,也就是请求路由,最方便的就是直接使用web容器来提供这样的路由机制,将爬虫业务逻辑写在现成的web框架中是一个不错的办法。但许多框架都太重量级了,我们需要的不是web框架的其它部分,我们仅仅只需要一个路由机制而已,这就意味着我们要用的是一个轻量级的web框架,并且可以单独使用其中的某一部分,不将多余的代码加入到其中,因为这会加大系统运行的成本,更重要的是,修改起来会更麻烦。这时候,Python的一款开源轻量级框架Flask就派上用场了。
下面给各位看看使用Flask搭建起来的最小的应用是啥样的,上代码(这是从Flask官网上拷贝的)。

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello World!'

if __name__ == '__main__':
    app.run()

把它保存为 hello.py (或是类似的),然后用 Python 解释器来运行。 确保你的应用文件名不是 flask.py ,因为这将与 Flask 本身冲突。

$ python hello.py

* Running on http://127.0.0.1:5000/

现在访问 http://127.0.0.1:5000/ ,你会看见 Hello World 问候。

看到这里,我发现Flask正好满足我们的需求,可以只用其路由机制,这样我们就可以把爬虫代码和路由机制都集成到一个Python文件上。
实现好爬虫的业务逻辑,封装成一个函数,而API也与爬虫代码在同一个文件上,有多少种类的数据我们就写多少个API,例如:

@app.route('/a')
def a():
    return 'a'

@app.route('/b')
def b():
    return 'b'

以上就写好了2个数据接口(当然这里只是举例),每个数据接口都调用我们在同一个页面封装好的爬虫函数,根据传入的参数不同来实现获取不同的数据即可。
请求URL分别为:http://127.0.0.1:5000/a , http://127.0.0.1:5000/b
用以上方法,简单有效地解决了问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值