Flask的一次巧妙应用
来源:互联网 发布:淘宝上卖水果怎么收费 编辑:程序博客网 时间:2024/06/05 18:49
想起之前我遇到了这样的一个场景:有一套项目源代码,这个项目有个需求是实时更新数据,每间隔5分钟就要更新一次,数据是通过请求API来获取,但这些API所在的服务器在美国,而我们的应用服务器则在香港,通讯链路过长导致了每次更新数据都会延时。因为项目代码涉及到大量业务逻辑,并且任务要求在2天时间内完成,如果去改动项目,牵扯到的问题将不仅仅是解决数据更新延时那么简单,所以我们在尽量不改变原有项目代码的前提下,把数据更新延时的问题解决掉。
因为同样的数据在香港也有,并不一定要请求美国服务器,但是香港本地提供的数据在网页上,没有提供API。为了尽量提高数据更新的即时性,我们只能从香港服务器请求数据了。
看到这里,你会采用什么方法?
我采用的方法是:写好网络爬虫挂在本机,项目里请求API的路径改为本机的爬虫服务(这样就只需要改动那部分URL,不需要改动其它业务逻辑,出错概率大大减小),每请求一次爬虫就会解析一次数据页面并把数据返回给项目。这确实是个办法,但若要请求爬虫服务,肯定要有一套API请求地址,也就是请求路由,最方便的就是直接使用web容器来提供这样的路由机制,将爬虫业务逻辑写在现成的web框架中是一个不错的办法。但许多框架都太重量级了,我们需要的不是web框架的其它部分,我们仅仅只需要一个路由机制而已,这就意味着我们要用的是一个轻量级的web框架,并且可以单独使用其中的某一部分,不将多余的代码加入到其中,因为这会加大系统运行的成本,更重要的是,修改起来会更麻烦。这时候,Python的一款开源轻量级框架Flask就派上用场了。
下面给各位看看使用Flask搭建起来的最小的应用是啥样的,上代码(这是从Flask官网上拷贝的)。
from flask import Flaskapp = 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
用以上方法,简单有效地解决了问题。
- Flask的一次巧妙应用
- 记一次巧妙的hacking
- hash的巧妙应用
- 位的巧妙应用
- 记一次前所未有巧妙的Hacking入侵
- 位逻辑运算的巧妙应用
- for循环的巧妙应用
- 异或的巧妙应用
- 二分搜索的巧妙应用
- android:layout_weight的巧妙应用
- std::shared_ptr的巧妙应用
- 函数指针的巧妙应用
- 位运算的巧妙应用
- 百度面试题之找出数组中之出现一次的两个数(异或的巧妙应用)
- poj1066巧妙的线段相交的应用
- 看JUnit4中Metadata的巧妙应用
- AJAX应用:巧妙的处理文件上传
- 向量转置的一个巧妙应用
- php合并图片
- OPNET 核心函数学习(二)
- Vue项目下使用Sass
- Python_test06-07
- vue-cli框架webpack.base.conf文件详解
- Flask的一次巧妙应用
- iOS UIImageView 加载含有汉字的url处理方法
- python2.7 import caffe遇到的那些坑-skimage.io stdint.h protobuf
- java HttpsURLConnection发送https请求
- mysql索引--使用注意事项
- linux+Windows双系统的各种难受
- bzoj1860 [Zjoi2006]麻将 结论+插数dp
- PK10实力计划群
- spring的@Transactional注解详细用法