[ Python ] 无聊用 FastApi 框架写了个每日热点接口

2020-01-26 21:53:10 +08:00
 Austin2035

本人大一自动化专业,热爱网络,热爱编程,偶尔写写 python, 躲避疫情,无聊之作....

我感觉我的博客可能阅读体验好一点: https://www.lookcos.cn/?p=466

源码 Github https://github.com/LookCos/hot-api

1.演示网站:

请求方法,http://cx.lookcos.cn/hot/ 后面加上你想获取的网站名字

http://cx.lookcos.cn/hot/zhihu 获取知乎热门

目前 有 weibo、vsite、bsite、tieba、zhihu,可扩展性强。

2.特点:

2.1. 多线程,能以迅雷不及掩耳之势完成对任务的抓取;

2.2. 任务分组进行,有些网站更新频率高(如微博,百度热搜等),而有些网站只需要每天抓取一次;

2.3. 使用 python3 threading.Timer 模块实现非阻塞定时任务;

2.4. 使用 FastApi 框架,配合 uvicorn,效率高。

3.说明:

3.1 关于启动 写完 fastapi 与 Flask 启动方式不太相同,查阅资料一般是告诉你这样启动。

uvicorn hotapi:app --reload

hostapi: 表示 app 所在文件名 app:FastAPI 实例 reload:debug 模式,可以自动重启,相当于 Flask 里面的 debug=Ture 了,你改着代码,它就自动重启一下,当然了,部署应用的时候千万不要带着了。

默认的端口是 8000,但是我想要 80 怎么办?

查百度,查谷歌,可能我搜索资料没耐心,也没发现怎么教你,去 fastapi 官方查了一通,全是英文,翻译了一下也没细看。

基本操作 –help一下……

直接 uvicorn hotapi:app --reload --port 80 就行了

无聊用 FastApi 框架写了个每日热点接口

那么我不想通过命令行来敲这个陌生的命令,我就想 python hotapi.py 一下运行,咋搞?

也不是没有办法,这也是所谓某些博客文章没有说的。

if name == 'main':

uvicorn.run(app=app,

host="0.0.0.0",

port=80)

前提是在开头 import uvicorn 一下

3.2 关于定时任务: 分组多线程运行爬虫,例如知乎、微博等需要频繁更新的为一组,设置为 每 15 秒更新一次,用 threading.timer 模块实现;

B 站等日榜,只需要每日更新一次即可,单独列为一组,同样每日运行一次;

4.启动方法:

4.1 执行:

python hotapi.py

4.2 也可以在命令行执行: uvicorn hotapi:app --port 80

5.数据格式与相应速度

数据格式

响应速度均在 30ms 以内,毕竟是提前抓取好的数据直接调用,看图。

1265 次点击
所在节点    分享创造
10 条回复
wzw
2020-01-26 23:57:36 +08:00
Fastapi 代码结构有好模版没
Trim21
2020-01-27 00:02:08 +08:00
@wzw fastapi 的作者有一个模板项目
wzw
2020-01-27 00:02:32 +08:00
@Trim21 哪个?
Trim21
2020-01-27 00:06:39 +08:00
@wzw full stack fastapi 什么的,用的是 pipenv,并且开发环境也是跑在 docker 里面的。这俩正好我都不喜欢,所以我只参考了后端的代码结构没,没用他的模板初始化项目…
Trim21
2020-01-27 00:10:18 +08:00
启动服务器的方式,uvicorn 的建议是用 gunicorn,然后结合 uvicorn 提供的 worker class 来部署的。

uvicorn app --reload 是开发模式用的
dcalsky
2020-01-27 03:42:11 +08:00
爬到的数据全放内存里不太好吧,最好找个数据库存一下,然后做个增量更新。
Austin2035
2020-01-27 09:14:56 +08:00
@dcalsky 考虑过这个问题,不过这点文本信息比较小,放到数据库里面还得部署数据库,个人认为就有点多余了。
Lax
2020-01-27 09:38:22 +08:00
@lookcos #7 sqlite 之类的就好了,不用额外部署。甚至可以直接存 JSON 文件
kasusa
2020-01-27 12:53:21 +08:00
https://github.com/LookCos/spider-taotu
我感觉你这个不是妹子图是色图……
Austin2035
2020-01-27 13:40:26 +08:00
@kasusa 没有露点啊 哈哈哈

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/640436

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX