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

Muhamad Nur Ibad
9 Januari 2025•1 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