热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用nodejs爬取b站番剧数据,计算最佳追番推荐

本文介绍了如何使用nodejs爬取b站番剧数据,并通过计算得出最佳追番推荐。通过调用相关接口获取番剧数据和评分数据,以及使用相应的算法进行计算。该方法可以帮助用户找到适合自己的番剧进行观看。

nodejs 爬取b站番剧数据, 计算最佳追番推荐

https://www.bilibili.com/anime/index/

 

 

单页数据接口, 用于获取单页数据

let url = `https://api.bilibili.com/pgc/season/index/result?season_version=-1&area=-1&is_finish=-1©right=-1&season_status=-1&season_mOnth=-1&year=-1&style_id=-1&order=3&st=1&sort=0&page=${++n}&season_type=1&pagesize=20&type=1

 

番剧数据接口, 获取番剧评分数据

https://api.bilibili.com/pgc/review/user?media_id=22718131

{
	"media": {
		"areas": [{ "id": 2, "name": "日本" }],
		"cover": "http://i0.hdslb.com/bfs/bangumi/9d9cd5a6a48428fe2e4b6ed17025707696eab47b.png",
		"media_id": 22718131,
		"new_ep": { "id": 267876, "index": "26", "index_show": "全26话" },
		"rating": { "count": 299753, "score": 9.8 },
		"season_id": 26801,
		"share_url": "https://www.bilibili.com/bangumi/media/md22718131",
		"title": "鬼灭之刃",
		"type_name": "番剧"
	}
}

 

爬取每部番剧数据

const axios = require("axios")
const {outputJsonSync} = require("fs-extra")
const path = require("path")
const root = "d:/data/B站番剧"

async function* getPage() {
  let n = 0
  let data
  do {
    let url = `https://api.bilibili.com/pgc/season/index/result?season_version=-1&area=-1&is_finish=-1©right=-1&season_status=-1&season_mOnth=-1&year=-1&style_id=-1&order=3&st=1&sort=0&page=${++n}&season_type=1&pagesize=20&type=1`
    let resp = await axios.get(url)
    data = resp.data.data
    // {
    //   code: 0,
    //   data: {
    //     has_next: 1,
    //     list: [ {
    //     "badge": "",
    //     "badge_type": 0,
    //     "cover": "http://i0.hdslb.com/bfs/bangumi/4eaaa8acecb52f1b400e88aa0df96a09a0947908.jpg",
    //     "index_show": "全51话",
    //     "is_finish": 1,
    //     "link": "https://www.bilibili.com/bangumi/play/ss5641",
    //     "media_id": 28221005,
    //     "order": "537追番",
    //     "order_type": "fav_count",
    //     "season_id": 5641,
    //     "title": "决斗大师VSR",
    //     "title_icon": ""
    //   },]
    //   }
    // }
    // console.log(data)
    yield data.list
  } while (data.has_next)
}

async function main() {
  let g = getPage()
  for await (let list of g) {
    for (let data of list) {
      let {title, media_id} = data.title
      let p = path.join(root, media_id + "_" + title + ".json")
      console.log(p)
      outputJsonSync(p, data)
    }
  }
}

main()

 

爬取每部番剧评分数据

const globby = require("globby");
const path = require("path")
const axios = require("axios")

const {outputJsonSync, pathExistsSync, readJsonSync} = require("fs-extra")
const root = "d:/data/B站番剧"

async function main() {
  let res = await globby(root + "/**/*.json")
  for (let filePath of res) {
    if (filePath.includes("rate"))
      continue
    let js = readJsonSync(filePath)
    let media_id = js.media_id
    let name = path.basename(filePath).split(".json")[0]
    let dir = path.dirname(filePath)
    let p = path.join(dir, name + "_" + "rate" + ".json")
    if (pathExistsSync(p) || !media_id) {
      if (!media_id)
        console.log("media_id", media_id)
      continue
    }
    let url = `https://api.bilibili.com/pgc/review/user?media_id=${media_id}`

    let resp = await axios.get(url)
    outputJsonSync(p, resp.data.result)
  }
}

main()

按照评分和人数排序

const globby = require("globby");
const {readJsonSync} = require("fs-extra")
const root = "d:/data/B站番剧"

async function main() {
  let res = await globby(root + "/**/*.json")
  res
    .filter(i => i.includes("rate"))
    .map(
      i => readJsonSync(i)
    )
    .filter(
      i => i.media && i.media.rating && i.media.rating.score
    )
    .sort(
      (a, b) => {
        let ar = a.media.rating
        let br = b.media.rating
        if (ar.score !== br.score)
          return b.media.rating.score - a.media.rating.score
        return br.count - ar.count
      }
    )
    .map(
      i => `<<${i.media.title}>>	${i.media.rating.score}	${i.media.rating.count}`
    )
    .slice(0, 100)
    .forEach(i => console.log(i))
}

main()

前100部

<<异度侵入 ID:INVADED>>	9.9	125285
<<青春猪头少年不会梦到怀梦美少女>>	9.9	94493
<<擅长捉弄的高木同学 第二季>>	9.9	87940
<<钢之炼金术师 FULLMETAL ALCHEMIST>>	9.9	66085
<<路人超能100 II(灵能百分百 第二季)>>	9.9	61324
<<游戏人生 零>>	9.9	47289
<<强风吹拂>>	9.9	45338
<<轻音少女 第一季>>	9.9	36610
<>	9.9	32608
<>	9.9	31746
<<妖精森林的小不点>>	9.9	31725
<>	9.9	29135
<<轻音少女 剧场版>>	9.9	27506
<<轻音少女 第二季>>	9.9	26250
<<猫和老鼠 旧版>>	9.9	25934
<>	9.9	24062
<<家庭教师HITMAN REBORN!>>	9.9	22293
<<高分少女 第二季>>	9.9	21263
<<犬夜叉>>	9.9	21180
<<俺物语!!>>	9.9	20799
<<排球少年!!>>	9.9	13055
<<魔法少女小圆 剧场版 [新篇] 叛逆的物语>>	9.9	12296
<<吹响吧!上低音号~誓言的终章~>>	9.9	10424
<<夏目友人帐>>	9.9	9418
<<哆啦A梦>>	9.9	8388
<<吹响吧!上低音号 第二季>>	9.9	8289
<<虫师>>	9.9	7781
<<犬夜叉完结篇>>	9.9	6044
<<哆啦A梦 第一季>>	9.9	1020
<<鬼灭之刃>>	9.8	299753
<>	9.8	196620
<<辉夜大小姐想让我告白~天才们的恋爱头脑战~>>	9.8	176165
<<青春猪头少年不会梦到兔女郎学姐>>	9.8	107951
<<革命机Valvrave>>	9.8	90951
<>	9.8	58778
<<女高中生的虚度日常>>	9.8	56418
<>	9.8	55586
<<碧蓝之海>>	9.8	55546
<<约定的梦幻岛>>	9.8	55026
<<少女终末旅行>>	9.8	54816
<<刀剑神域>>	9.8	53395
<<冰海战记>>	9.8	50635
<<宝石之国>>	9.8	50403
<<卫宫家今天的饭>>	9.8	43701
<<魔卡少女樱 CLEAR CARD篇>>	9.8	42431
<>	9.8	41616
<>	9.8	41408
<<冰菓>>	9.8	40681
<<天使降临到我身边>>	9.8	38565
<<某科学的超电磁炮T>>	9.8	35964
<<齐木楠雄的灾难 第二季>>	9.8	31832
<<四月是你的谎言>>	9.8	31278
<<比宇宙更远的地方>>	9.8	30951
<<你的名字。>>	9.8	30874
<<齐木楠雄的灾难 始动篇>>	9.8	29694
<<月刊少女野崎君>>	9.8	29178
<>	9.8	28006
<<文豪野犬 第三季>>	9.8	26946
<<幻界战线 & BEYOND>>	9.8	26843
<<月色真美>>	9.8	26462
<<街角魔族>>	9.8	25880
<<日常>>	9.8	25827
<<剧场版 中二病也要谈恋爱! -Take On Me->>	9.8	24187
<<我的青春恋爱物语果然有问题。 续>>	9.8	23749
<<此花亭奇谭>>	9.8	23578
<<终将成为你>>	9.8	22817
<<少女☆歌剧 Revue Starlight>>	9.8	21568
<<男子高中生的日常>>	9.8	21232
<<魔法少女小圆>>	9.8	19781
<<斩服少女>>	9.8	19637
<<灰与幻想的格林姆迦尔 >>	9.8	19332
<<龙珠超:布罗利>>	9.8	15545
<<流汗吧!健身少女>>	9.8	15354
<<3月的狮子 第二季>>	9.8	13934
<<進擊的巨人 第三季 Part.2(僅限台灣地區)>>	9.8	13505
<<玉子爱情故事>>	9.8	13374
<<玉子市场>>	9.8	12961
<<会长是女仆大人!>>	9.8	12631
<<百变小樱>>	9.8	12377
<<邻家索菲>>	9.8	12248
<<齐木楠雄的灾难 完结篇>>	9.8	11020
<<神推偶像登上武道馆我就死而无憾>>	9.8	10433
<<路人超能100 第一次灵能咨询所员工旅游~舒缓心灵的疗愈之旅~(OVA2)>>	9.8	10421
<<索玛丽与森林之神>>	9.8	9969
<<吹响吧!上低音号>>	9.8	9230
<<怪化猫>>	9.8	8719
<<黑执事>>	9.8	8588
<<夏目友人帐 陆>>	9.8	8515
<<恋爱小行星>>	9.8	8135
<<狼与香辛料>>	9.8	8096
<<剧场版 悠哉日常大王 Vacation>>	9.8	7871
<<企鹅公路>>	9.8	7461
<<欢迎光临樱兰高校>>	9.8	7429
<<夏目友人帐>>	9.8	7417
<<幸运星>>	9.8	7315
<<乒乓>>	9.8	7239
<>	9.8	7230
<<玛纳利亚的密友(Mysteria Friends)/巴哈姆特之怒/玛娜利亚魔法学院>>	9.8	6849
<<重启咲良田>>	9.8	6775
<<3月的狮子>>	9.8	6548

Process finished with exit code 0

 


推荐阅读
  • 云函数与数据库API实现增删查改的对比
    本文将深入探讨使用云函数和数据库API实现数据操作(增删查改)的不同方法,通过详细的代码示例帮助读者更好地理解和掌握这些技术。文章不仅提供代码实现,还解释了每种方法的特点和适用场景。 ... [详细]
  • JavaScript中的数组是数据集合的核心结构之一,内置了多种实用的方法。掌握这些方法不仅能提高开发效率,还能显著提升代码的质量和可读性。本文将详细介绍数组的创建方式及常见操作方法。 ... [详细]
  • 本文探讨了如何在Node.js环境中,通过Tor网络使用的SOCKS5代理执行HTTP请求。文中不仅提供了基础的实现方法,还介绍了几种常用的库和工具,帮助开发者解决遇到的问题。 ... [详细]
  • 深入解析JavaScript中的require与import差异
    本文深入探讨了JavaScript中require与import的主要区别,并通过实际案例详细说明了它们的工作原理及应用场景,对于开发者理解和使用这两种模块加载方式具有重要指导意义。 ... [详细]
  • 本文介绍如何使用 Angular 6 的 HttpClient 模块来获取 HTTP 响应头,包括代码示例和常见问题的解决方案。 ... [详细]
  • 本文介绍了如何使用JavaScript的Fetch API与Express服务器进行交互,涵盖了GET、POST、PUT和DELETE请求的实现,并展示了如何处理JSON响应。 ... [详细]
  • 深入理解Vue.js:从入门到精通
    本文详细介绍了Vue.js的基础知识、安装方法、核心概念及实战案例,帮助开发者全面掌握这一流行的前端框架。 ... [详细]
  • 本文介绍了如何在 Node.js 中使用 `setDefaultEncoding` 方法为可写流设置默认编码,并提供了详细的语法说明和示例代码。 ... [详细]
  • 本文介绍如何从字符串中移除大写、小写、特殊、数字和非数字字符,并提供了多种编程语言的实现示例。 ... [详细]
  • 在高并发需求的C++项目中,我们最初选择了JsonCpp进行JSON解析和序列化。然而,在处理大数据量时,JsonCpp频繁抛出异常,尤其是在多线程环境下问题更为突出。通过分析发现,旧版本的JsonCpp存在多线程安全性和性能瓶颈。经过评估,我们最终选择了RapidJSON作为替代方案,并实现了显著的性能提升。 ... [详细]
  • Symfony是一个功能强大的PHP框架,以其依赖注入(DI)特性著称。许多流行的PHP框架如Drupal和Laravel的核心组件都基于Symfony构建。本文将详细介绍Symfony的安装方法及其基本使用。 ... [详细]
  • 本文详细解释了为什么在成功执行移动赋值操作后,对象的析构函数会被调用,并提供了代码示例和详细的分析。 ... [详细]
  • 本文将继续探讨前端开发中常见的算法问题,重点介绍如何将多维数组转换为一维数组以及验证字符串中的括号是否成对出现。通过多种实现方法的解析,帮助开发者更好地理解和掌握这些技巧。 ... [详细]
  • 本文详细介绍了 Node.js 中 Worker.isMainThread 属性的功能、用法及其实例代码,帮助开发者更好地理解和利用多线程技术。 ... [详细]
  • Node.js 入门指南(一)
    本文介绍了Node.js的安装步骤、如何创建第一个应用程序、NPM的基本使用以及处理回调函数的方法。通过实际操作示例,帮助初学者快速掌握Node.js的基础知识。 ... [详细]
author-avatar
让安丷全筑起心灵的屏障
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有