如何使用Python读取npm数据并抓取指定npm包页面的目标公开信息
npm包信息获取操作指南
方案说明
不需要自己写爬虫抓取前端页面,npm官方提供了公开的Registry REST API,直接调用就能拿到结构化的包数据,比页面解析更稳定,也不会遇到反爬限制。
具体操作路径
- 单包信息查询:直接向
https://registry.npmjs.org/[包名]发送GET请求即可,比如你要查询的handlebars,请求地址为https://registry.npmjs.org/handlebars,返回结果为标准JSON格式,所有页面上展示的字段都可以直接提取。 - 下载量专项查询:如果需要单独获取周/月/年维度的下载统计,可以向
https://api.npmjs.org/downloads/point/[时间范围]/[包名]发送请求,时间范围支持last-day/last-week/last-month等参数。
你截图中高频字段的对应关系
不用自己逐层找字段,常用信息直接取以下路径即可:
- 最新版本号:
dist-tags.latest - 许可证类型:
license - 开源代码仓库地址:
repository.url - 首次发布时间:
time.created - 最近更新时间:
time.modified - 生产依赖数量:
dependencies对象的键值对数量 - 开发依赖数量:
devDependencies对象的键值对数量 - 维护者列表:
maintainers数组 - 每周下载量:下载量接口返回的
downloads字段
最简调用示例(Node.js环境)
// 直接调用官方API获取handlebars包信息 async function getHandlebarsInfo() { // 获取基础包信息 const baseRes = await fetch("https://registry.npmjs.org/handlebars"); const baseInfo = await baseRes.json(); // 获取上周下载量 const downloadRes = await fetch("https://api.npmjs.org/downloads/point/last-week/handlebars"); const downloadInfo = await downloadRes.json(); // 组装你需要的所有数据 return { latestVersion: baseInfo["dist-tags"].latest, license: baseInfo.license, repoUrl: baseInfo.repository.url, lastUpdate: baseInfo.time.modified, weeklyDownloads: downloadInfo.downloads, dependencyCount: Object.keys(baseInfo.dependencies || {}).length } } // 执行调用输出结果 getHandlebarsInfo().then(console.log)
注意事项
- 官方API对普通非商用请求的频率限制很宽松,个人项目直接调用即可,不需要申请密钥或者认证
- 不要用爬虫解析前端页面,npm前端页面结构会不定期迭代,页面解析逻辑很容易失效,官方API的返回结构长期保持兼容稳定
- 如果需要批量查询多个包的信息,可以参考官方Registry文档的批量请求规则调整调用方式,减少请求次数
内容的提问来源于stack exchange,提问作者Bobthebuilder
相关产品推荐
相关产品推荐

