本人大一自动化专业,热爱网络,热爱编程,偶尔写写 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 以内,毕竟是提前抓取好的数据直接调用,看图。

