根据 2019 年 8 月 16 的 npm top1000 的包名,获取这些包现在的下载量排行,默认展示前30。地址 https://www.npmrank.net/ ,前端仓库地址为 npmrank-v
- 数据使用的包名来自 anvaka 2019 年爬取的 top1000 数据,距今三四年的时间,但是老的包一般被依赖的多下载量大,所以对前面的排名影响应该不是很大
- 获取数据使用的 api 来自 npm
- npm 每天在 UTC 凌晨不久后更新数据,所以这里选择在 UTC 3 点 使用 crontab 定时任务更新新的数据,持续大约1~2小时,因为这是协调世界时,这会产生一些有点不直观的结果
- 总数据为 2015 年至今的数据
- github star 来自爬到的 github 页面数据
如果有看到下载量比较多但是不在source.md
的包,欢迎提 issue
- 安装依赖
pip3 install -r requirements.txt
- 生成或更新下载数据, 网络正常的情况下持续大约1~2小时
nohup python3 -u generate_download_data.py > nohup.out 2>&1 &
- 查看日志
tail -30f nohup.out
.
├── LICENSE
├── README.md
├── database.db # sqlite3的包下载数据
├── db.py # 数据库方法
├── generate_download_data.py # 生成、更新新数据
├── requirements.txt
├── server.py # 给前端展示提供数据
└── source.md # 2019年包排名
- 使用代理,同时发出多个请求
- 目前是前 30 条,希望能展示更多的数据,但是图表不方便展示更多的数据
- 更新数据
generate_download_data
时电脑不能开代理,否则请求报 SSL443 错误 - 同一接口如 https://www.npmjs.com/package/glob 会根据不同的 header 来返回 json 或者 html,但是暂未确认是哪个 header
- 单次查询最多限于 18 个月的数据,返回数据的最早日期是 2015 年 1 月 10 日
- 获取某个包某个区间的下载量,可能为 0,不确定是什么原因,例如
返回
https://api.npmjs.org/downloads/point/2020-01-01:2021-01-01/express
{ "downloads": 0, "start": "2020-01-01", "end": "2021-01-01", "package": "express" }
感谢大哥的数据库指导 sunkxs