Web Scraping adalah teknik untuk mengumpulkan data dari situs web yang melibatkan script dengan metode tertentu menyesuaikan data apa yang akan diambil. Umumnya web scraping digunakan untuk berbagai keperluan seperti analisis data, pengumpulan informasi dan masih banyak lagi.
Install Puppeteer
Install Node.js.
NODE_MAJOR=20
curl -fsSL https://deb.nodesource.com/setup_$NODE_MAJOR.x | sudo bash -
sudo apt -y install nodejs
Selanjutnya install puppeteer dengan perintah.
npm install puppeteer
Install browser Chrome yang diperlukan oleh puppeteer.
npx puppeteer browsers install [email protected]
Lalu install dependensi browser.
sudo apt -y install libatk1.0-0\
libatk-bridge2.0-0\
libcups2\
libxkbcommon0\
libxcomposite1\
libxdamage1\
libxfixes3\
libxrandr2\
libgbm1\
libpango-1.0-0\
libcairo2\
libasound2\
libatspi2.0-0
Example Script
Berikut adalah contoh script untuk menganalisis URL yang terdapat di dalam file list_url.txt
berdasarkan list keyword yang ada di file list_keyword.txt
.
Buat file scraper.js
.
nano scraper.js
Lalu tambahkan kode berikut.
const puppeteer = require('puppeteer');
const fs = require('fs');
// Membaca baris dari file
const readLines = (filePath) => {
return fs.readFileSync(filePath, 'utf-8')
.split('\n')
.filter(Boolean);
};
(async () => {
const browser = await puppeteer.launch({
ignoreHTTPSErrors: true,
args: ['--no-sandbox', '--disable-setuid-sandbox']
});
const urls = readLines('list_url.txt');
const keywords = readLines('list_keyword.txt');
// Memproses URL per 100
const chunkSize = 100;
for (let i = 0; i < urls.length; i += chunkSize) {
const chunk = urls.slice(i, i + chunkSize);
const results = await Promise.allSettled(chunk.map(async (url) => {
const page = await browser.newPage();
try {
await page.goto(url, { waitUntil: 'networkidle2' });
const content = await page.content();
let foundKeywords = [];
for (const keyword of keywords) {
if (content.includes(keyword)) {
foundKeywords.push(keyword);
}
}
await page.close(); // Menutup halaman setelah selesai
if (foundKeywords.length > 0) {
return `Kata ${foundKeywords.join(' dan ')} ditemukan di ${url}`;
} else {
return `Tidak ada kata kunci yang ditemukan di ${url}`;
}
} catch (error) {
await page.close(); // Menutup halaman jika terjadi error
return `Error accessing ${url}: ${error.message}`;
}
}));
results.forEach(result => console.log(result.value || result.reason)); // Menampilkan hasil
}
await browser.close();
})();
Kemudian, tambahkan URL yang akan di-scraping ke dalam file list_url.txt
. Misal Anda bisa mengambilnya dari access log dan diparsing menggunakan script berikut.
const fs = require('fs');
const readline = require('readline');
const fileStream = fs.createReadStream('access_log');
const rl = readline.createInterface({
input: fileStream,
crlfDelay: Infinity
});
rl.on('line', (line) => {
const regex = /GET\s(\/[^\s]*)\sHTTP\/1.1/;
const domainRegex = /\d+\.\d+\.\d+\.\d+\s-\s-\s\[\d+\/\w+\/\d+:\d+:\d+:\d+\s\+\d+\]\s"GET\s\/[^\s]*\sHTTP\/1.1"\s\d+\s\d+\s(\S+)/;
const urlMatch = line.match(regex);
const domainMatch = line.match(domainRegex);
if (urlMatch && domainMatch) {
const url = `http://${domainMatch[1]}${urlMatch[1]}`;
console.log(url);
}
});
rl.on('close', () => {
console.log('Parsing completed.');
});
Tambahkan beberapa keyword yang ingin Anda cari ke dalam file list_keyword.txt
.
Selanjutnya jalankan script untuk memulai scraping.
node scraper.js