Sokuja Scraper Dengan NodeJs

Web scraping adalah teknik yang memungkinkan Anda untuk mengumpulkan data dari situs web secara otomatis.

Muhamad Nur Ibad

9 Januari 20251 menit baca

Web Scraping Anime dengan Sokuja: Tutorial dan Implementasi

Web scraping adalah teknik yang memungkinkan Anda untuk mengumpulkan data dari situs web secara otomatis. Pada artikel ini, kita akan membahas cara menggunakan Node.js untuk melakukan web scraping pada situs Sokuja dengan kode yang memanfaatkan Cheerio dan Axios. Anda juga akan belajar cara mengimplementasikan fungsi-fungsi untuk mengambil informasi terbaru, mencari anime, melihat detail, hingga mengunduh episode.

Apa Itu Web Scraping?

Web scraping adalah proses pengambilan data dari halaman web secara terstruktur, biasanya menggunakan kode program. Teknik ini bermanfaat untuk mengakses data yang tidak disediakan oleh API publik.


Tools yang Dibutuhkan

Sebelum memulai, pastikan Anda telah menginstal:

1. Node.js: Lingkungan runtime JavaScript.

2. Cheerio: Library yang digunakan untuk mem-parsing HTML, mirip dengan jQuery.

3. Axios: Library untuk melakukan HTTP request.

Instalasi Dependencies

Gunakan perintah berikut untuk menginstal Cheerio dan Axios:

npm install cheerio axios


Implementasi Kode Scraper Sokuja

Berikut adalah implementasi scraper sederhana untuk situs Sokuja. File ini menggunakan class Sokuja untuk memisahkan beberapa fungsi utama:

Struktur Kode

const cheerio = require("cheerio");
const axios = require("axios");

class Sokuja {
  // Fungsi untuk mendapatkan anime terbaru
  latest = async function latest() {
    return new Promise(async (resolve, reject) => {
      await axios.get("https://x1.sokuja.uk").then((a) => {
        let $ = cheerio.load(a.data);
        let array = [];
        $(".seventh").each((a, i) => {
          array.push({
            title: $(i).find(".main-seven a").attr("title"),
            type: $(i).find(".main-seven .limit .bt .type").text(),
            thumbnail: $(i).find(".main-seven .limit img").attr("src"),
            episode: $(i).find(".main-seven .limit .epin").text(),
            url: $(i).find(".main-seven a").attr("href"),
          });
        });
        resolve(array);
      });
    });
  };

  // Fungsi untuk mencari anime berdasarkan kata kunci
  search = async function Search(q) {
    return new Promise(async (resolve, reject) => {
      await axios
        .get("https://x1.sokuja.uk?s=" + encodeURIComponent(q))
        .then((a) => {
          let $ = cheerio.load(a.data);
          let array = [];
          $(".listupd .bs .bsx").each((a, i) => {
            array.push({
              title: $(i).find("a").attr("title"),
              type: $(i).find("a .limit .typez").text(),
              thumbnail: $(i).find("a .limit img").attr("src"),
              status: $(i).find("a .limit .status").text(),
              url: $(i).find("a").attr("href"),
            });
          });
          resolve(array);
        });
    });
  };

  // Fungsi untuk mendapatkan detail anime
  detail = async function detail(url) {
    return new Promise(async (resolve, reject) => {
      await axios.get(url).then((a) => {
        let $ = cheerio.load(a.data);
        let array = {
          metadata: {},
          episode: [],
        };
        $(".infox").each((a, i) => {
          array.metadata.title = $(i).find("h1").text();
          $(i)
            .find(".info-content .spe span")
            .each((b, d) => {
              let name = $(d).find("span b").text();
              let key = $(d).text().replace(name, "").trim();
              array.metadata[
                name.toLowerCase().split(":")[0].split(" ").join("_")
              ] = key;
            });
          array.metadata.thumbnail = $(".thumb img").attr("src");
          array.metadata.sinopsis = $(".entry-content p").eq(1).text().trim();
        });
        $(".eplister ul li").each((a, i) => {
          array.episode.push({
            title: $(i).find(".epl-title").text(),
            release: $(i).find(".epl-date").text(),
            url: $(i).find("a").attr("href"),
          });
        });
        resolve(array);
      });
    });
  };

  // Fungsi untuk mendapatkan link download episode
  episode = async function episode(url) {
    return new Promise(async (resolve, reject) => {
      await axios.get(url).then((a) => {
        let $ = cheerio.load(a.data);
        let array = {
          metadata: {},
          downloads: {},
        };
        array.metadata.title = $(".title-section h1").text();
        array.metadata.thumbnail = $(".tb img").attr("src");
        array.metadata.updated = $(".lm .updated").text();
        $(".mirror option").each((a, i) => {
          let exec = cheerio.load(atob($(i).attr("value")));
          let mimetype = exec("source").attr("type");
          let quality = $(i).text().trim().split(" ")[1];
          let url = exec("source").attr("src");
          if (!url) return;
          array.downloads[quality] = {
            quality,
            mimetype,
            url,
          };
        });
        resolve(array);
      });
    });
  };
}

module.exports = new Sokuja();

Penjelasan Fungsi

1. latest: Mengambil daftar anime terbaru di halaman utama.

2. search: Mencari anime berdasarkan kata kunci tertentu.

3. detail: Mendapatkan informasi lengkap tentang anime, termasuk metadata dan daftar episode.

4. episode: Mendapatkan metadata episode serta link download dalam berbagai kualitas.


Contoh Penggunaan

1. Mengambil Daftar Anime Terbaru

const Sokuja = require("./Sokuja");

(async () => {
  let latestAnime = await Sokuja.latest();
  console.log(latestAnime);
})();

2. Mencari Anime

const Sokuja = require("./Sokuja");

(async () => {
  let searchResults = await Sokuja.search("Naruto");
  console.log(searchResults);
})();

3. Mendapatkan Detail Anime

const Sokuja = require("./Sokuja");

(async () => {
  let details = await Sokuja.detail("https://x1.sokuja.uk/anime/naruto");
  console.log(details);
})();

4. Mendapatkan Link Download Episode

const Sokuja = require("./Sokuja");

(async () => {
  let episodeData = await Sokuja.episode("https://x1.sokuja.uk/episode/naruto-1");
  console.log(episodeData);
})();

Kesimpulan

Dengan menggunakan kombinasi Cheerio dan Axios, Anda dapat dengan mudah melakukan scraping pada situs seperti Sokuja. Teknik ini bermanfaat untuk mengumpulkan data secara otomatis dan menyediakan API custom untuk kebutuhan aplikasi Anda. Namun, pastikan Anda mematuhi kebijakan penggunaan situs web yang bersangkutan.

Creator: Axel
Sumber: https://github.com/AxellNetwork