天天看點

教大家通過node爬取b站api資料

      最近我打算做一個仿b站頁面的項目,打算直接從b站api取資料,然後用ajax請求了一下url發現這個api果然是不支援跨域的,是以我打算通過node.js抓取b站資料搭建伺服器來完成這個項目并順便寫了這篇部落格。

教大家通過node爬取b站api資料

      下面我将會把自己爬取api的步驟分享給大家,剛開始寫部落格,思路略有些混亂請大家見諒,部落格中若有錯誤還請嚴厲指出。

      今天我爬取的頁面是b站番劇類目中番劇索引頁面中的資料(我是b站粉ヽ(ー_ー)ノ)。

教大家通過node爬取b站api資料

      1、打開番劇索引頁面并按F12打開控制台,重新整理一下頁面,然後到控制台的network中頁面将filter設定為XHR,然後依次檢視各個請求的Response中有沒有所需資料,有資料的請求就是我們今天要找的。

教大家通過node爬取b站api資料

       2、下面切換到Headers頁面,Request URL 中的位址就是我們要的url,請求類型為get,通過page可以選擇查詢的頁碼,page_size可以選擇每頁的資料條數,後面的每個查詢字元串都有自己的意義大家可以自己摸索。

教大家通過node爬取b站api資料

       3、下一步就是通過node.js中的https模仿浏覽器向b站伺服器發送請求來擷取資料,請求位址就是我們上面找到的URL,請求類型為get,具體代碼如下:

'use strict'

const http = require('https');
const url = require('url');

var biliUrl = `https://bangumi.bilibili.com/web_api/season/
            index_global?page=1&page_size=20&version=0
            &is_finish=0&start_year=0&tag_id=&index_type=1
            &index_sort=0&quarter=`;

http.get(biliUrl, (res) => {
    var data = '';  //接口資料

    res.on('data', (chunk) => {
        data += chunk;    //拼接資料塊
    });
    res.on('end', function() {
        let json = JSON.parse(data); //解析json
       
        console.log(json);  //列印json
    })
}).on('error', () => 
    console.log('擷取資料出錯!')
);

           

     運作後控制台效果如下(其中每一個Object對象中都存在一部番劇的資訊):

教大家通過node爬取b站api資料

       下面是第一個obj對象裡包含的内容,其中有番劇名(title),番劇圖檔連接配接(cover),番劇url(url),番劇更新時間(week)等資訊.

教大家通過node爬取b站api資料

繼續閱讀