Dokumentasi Cheerio v1.2.0
Cheerio adalah library yang cepat, fleksibel, dan elegan untuk parsing dan memanipulasi HTML dan XML di sisi server. Library ini mengimplementasikan subset dari fungsionalitas inti jQuery, menyediakan API yang familiar bagi developer sambil dioptimalkan untuk lingkungan server-side.
Fitur Versi Terkini (1.2.0)
Method Loading Inti
Versi terkini menyediakan beberapa cara yang powerful untuk memuat dan parsing dokumen HTML/XML:
import * as cheerio from 'cheerio';
// Basic loading from string
const $ = cheerio.load('<h2 class="title">Hello world</h2>');
// Loading from buffer with encoding detection
const buffer = fs.readFileSync('index.html');
const $ = cheerio.loadBuffer(buffer);
// Loading from URL with automatic encoding detection
const $ = await cheerio.fromURL('https://example.com');
// Stream-based loading for large documents
const stream = cheerio.stringStream({}, (err, $) => {
if (!err) {
console.log($('h1').text());
}
});
Dukungan TypeScript yang Ditingkatkan
Versi 1.2.0 menyertakan definisi TypeScript yang komprehensif dengan type safety yang lebih baik:
import { CheerioAPI, Cheerio, Element } from 'cheerio';
// Strongly typed element selection
const $: CheerioAPI = cheerio.load(html);
const elements: Cheerio<Element> = $('.my-class');
API Extract yang Baru
Fitur baru yang powerful untuk ekstraksi data dari dokumen HTML:
const data = $root.extract({
title: 'h1',
links: [{ selector: 'a', value: 'href' }],
metadata: {
selector: '.meta',
value: {
author: '.author',
date: '.date'
}
}
});
Penanganan URL Lanjutan
Dukungan yang ditingkatkan untuk resolusi URL dengan baseURI:
const $ = cheerio.load(html, {
baseURI: 'https://example.com/page/'
});
// Automatically resolves relative URLs
$('a').prop('href'); // Returns absolute URL
$('img').prop('src'); // Returns absolute URL
Fitur Utama Berdasarkan Kategori
Manipulasi DOM
- Seleksi elemen dengan gaya jQuery menggunakan CSS selector
- Manipulasi atribut dan properti yang komprehensif
- Dukungan penuh untuk method traversal DOM
- Penyisipan, penghapusan, dan modifikasi elemen
Penanganan Form
// Serialize forms to URL-encoded strings
$('form').serialize(); // 'name=value&email=test@example.com'
// Get form data as structured arrays
$('form').serializeArray();
// [{ name: 'username', value: 'john' }, ...]
CSS dan Styling
// Get/set CSS properties
$('.element').css('color', 'red');
$('.element').css(['margin', 'padding']); // Get multiple properties
// Class manipulation
$('.item').addClass('active selected');
$('.item').removeClass('old-class');
$('.item').toggleClass('visible');
Data Attribute
// HTML5 data-* attribute support with automatic type coercion
$('.widget').data('config'); // Parses JSON automatically
$('.widget').data('count', 42); // Set data programmatically
Migrasi dari Versi Lama
Dari 0.x ke 1.x
- Breaking: Membutuhkan Node.js 12+ (menghentikan dukungan untuk versi lama)
- Breaking: Beberapa API internal telah berubah
- Ditingkatkan: Dukungan TypeScript yang lebih baik secara menyeluruh
- Baru: Parsing berbasis stream untuk efisiensi memori yang lebih baik
Perubahan Utama yang Perlu Diperhatikan
// Old way (0.x) - still works but discouraged
const cheerio = require('cheerio');
const $ = cheerio.load(html);
// New way (1.x) - recommended
import * as cheerio from 'cheerio';
const $ = cheerio.load(html);
Peningkatan Performa
Versi 1.2.0 menyertakan peningkatan performa yang signifikan:
- Parsing lebih cepat: Parser HTML yang diperbaiki dengan penanganan error yang lebih baik
- Efisiensi memori: Mengurangi jejak memori untuk dokumen besar
- Dukungan streaming: Memproses dokumen besar tanpa memuat sepenuhnya ke dalam memori
// Stream processing for large files
const stream = cheerio.decodeStream({
encoding: { defaultEncoding: 'utf8' }
}, (err, $) => {
// Process document as it streams
});
Fitur Lanjutan
Opsi Parser Kustom
const $ = cheerio.load(html, {
xmlMode: true, // Parse as XML
decodeEntities: false, // Don't decode HTML entities
scriptingEnabled: false // Disable script tag processing
});
Network Loading dengan Opsi
const $ = await cheerio.fromURL('https://api.example.com/data', {
requestOptions: {
headers: { 'User-Agent': 'MyBot/1.0' }
},
encoding: { defaultEncoding: 'utf8' }
});
Best Practice
- Gunakan TypeScript: Manfaatkan definisi type yang komprehensif
- Stream dokumen besar: Gunakan API streaming untuk manajemen memori yang lebih baik
- Manfaatkan API extract: Gunakan method extract yang baru untuk ekstraksi data terstruktur
- Set baseURI: Ketika melakukan scraping website, set baseURI untuk resolusi URL yang tepat
Perbedaan Browser vs Server
Cheerio dirancang untuk penggunaan server-side dan menghilangkan fitur jQuery yang spesifik untuk browser sambil menambahkan fungsionalitas yang dioptimalkan untuk server seperti:
- Tidak ada inkonsistensi DOM browser
- Penanganan error yang lebih baik untuk HTML yang malformed
- Parsing yang efisien secara memori
- Kapabilitas pemrosesan stream
- Deteksi encoding otomatis
Hal ini membuat Cheerio ideal untuk web scraping, server-side rendering, dan tugas pemrosesan HTML/XML apa pun di lingkungan Node.js.