本人大一自动化专业,热爱网络,热爱编程,偶尔写写 python, 躲避疫情,无聊之作....
我感觉我的博客可能阅读体验好一点: https://www.lookcos.cn/?p=466
源码 Github https://github.com/LookCos/hot-api
请求方法,http://cx.lookcos.cn/hot/ 后面加上你想获取的网站名字
http://cx.lookcos.cn/hot/zhihu 获取知乎热门
目前 有 weibo、vsite、bsite、tieba、zhihu,可扩展性强。
2.1. 多线程,能以迅雷不及掩耳之势完成对任务的抓取;
2.2. 任务分组进行,有些网站更新频率高(如微博,百度热搜等),而有些网站只需要每天抓取一次;
2.3. 使用 python3 threading.Timer 模块实现非阻塞定时任务;
2.4. 使用 FastApi 框架,配合 uvicorn,效率高。
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.1 执行:
python hotapi.py
4.2 也可以在命令行执行:
uvicorn hotapi:app --port 80
数据格式
响应速度均在 30ms 以内,毕竟是提前抓取好的数据直接调用,看图。
1
wzw 2020-01-26 23:57:36 +08:00 via iPhone
Fastapi 代码结构有好模版没
|
4
Trim21 2020-01-27 00:06:39 +08:00 via Android
@wzw full stack fastapi 什么的,用的是 pipenv,并且开发环境也是跑在 docker 里面的。这俩正好我都不喜欢,所以我只参考了后端的代码结构没,没用他的模板初始化项目…
|
5
Trim21 2020-01-27 00:10:18 +08:00 via Android
启动服务器的方式,uvicorn 的建议是用 gunicorn,然后结合 uvicorn 提供的 worker class 来部署的。
uvicorn app --reload 是开发模式用的 |
6
dcalsky 2020-01-27 03:42:11 +08:00
爬到的数据全放内存里不太好吧,最好找个数据库存一下,然后做个增量更新。
|
7
Austin2035 OP @dcalsky 考虑过这个问题,不过这点文本信息比较小,放到数据库里面还得部署数据库,个人认为就有点多余了。
|
9
kasusa 2020-01-27 12:53:21 +08:00
https://github.com/LookCos/spider-taotu
我感觉你这个不是妹子图是色图…… |
10
Austin2035 OP @kasusa 没有露点啊 哈哈哈
|