Cara Menavigasi Situs Web Pager Berbasis JavaScript dan Mengumpulkan Tautan

Pagination

Memahami Pagination Berbasis JavaScript dan Tantangan API

Situs web dengan penomoran halaman berbasis JavaScript dapat mempersulit pengunjung untuk menavigasi materi, terutama jika kontrol penomoran halaman tidak mengungkapkan parameter URL apa pun. Hal ini membuat modifikasi atau otomatisasi navigasi halaman tidak mungkin dilakukan menggunakan pendekatan konvensional seperti mengubah kueri URL. Dimungkinkan untuk terlibat dengan pager tersebut melalui metode yang berbeda.

Salah satu masalah tersebut terjadi ketika mencoba mengambil tautan atau data dari situs web jenis ini. Jika Anda tidak dapat menavigasi ratusan halaman secara manual, pendekatan yang lebih baik adalah dengan menyimulasikan peristiwa klik pada pager JavaScript. Teknologi ini mengotomatiskan prosedur navigasi, sangat menyederhanakan tugas pengumpulan data.

Dalam beberapa keadaan, tab "Jaringan" di Alat Pengembang browser mungkin menampilkan titik akhir API yang memberikan informasi berguna. Namun, berinteraksi secara langsung dengan titik akhir ini terkadang dapat menimbulkan masalah karena titik akhir tersebut mungkin tidak mengizinkan metode HTTP tertentu, seperti permintaan GET, yang biasanya digunakan untuk mengambil data.

Artikel ini menjelaskan cara menyimulasikan peristiwa klik pada pager JavaScript situs web dan cara menangani batasan API yang membatasi akses langsung ke data yang Anda perlukan. Kami juga akan mencari cara untuk mengatasi batasan metode API tertentu untuk memastikan bahwa Anda mengumpulkan semua informasi penting secara efektif.

Memerintah Contoh penggunaan
document.querySelector() Metode ini digunakan untuk memilih elemen pertama yang cocok dengan pemilih CSS tertentu. Skrip menggunakannya untuk memilih wadah penomoran halaman (const pagerContainer = document.querySelector('.pagination')) dan mengontrol tombol pager.
Array.from() Mengonversi objek seperti array atau objek yang dapat diubah menjadi array yang tepat. Skrip ini mengubah NodeList tautan iklan menjadi array untuk memudahkan manipulasi dan pemetaan (Array.from(document.querySelectorAll('.ad-link-selector')).
puppeteer.launch() Saat digunakan dengan Puppeteer, perintah ini meluncurkan instance browser tanpa kepala baru. Ini mendukung tindakan browser otomatis seperti navigasi halaman dan simulasi interaksi pengguna (const browser = menunggu dalang.launch()).
page.evaluate() In Puppeteer, this method allows you to run JavaScript code in the context of the web page you are controlling. It is used here to extract ad links from the DOM (await page.evaluate(() =>Di Puppeteer, metode ini memungkinkan Anda menjalankan kode JavaScript dalam konteks halaman web yang Anda kendalikan. Di sini digunakan untuk mengekstrak tautan iklan dari DOM (tunggu page.evaluate(() => {...})).
page.waitForSelector() Menunggu pemilih tertentu muncul di halaman sebelum melanjutkan, memastikan bahwa semua elemen dinamis dimuat. Hal ini sangat penting ketika menjelajahi konten yang diberi halaman, karena iklan baru muncul setiap kali halaman diubah (tunggu page.waitForSelector('.ad-link-selector').
axios.post() Mengirim permintaan HTTP POST ke URL yang disediakan. Sampel mencoba menghindari masalah 405 dengan memperoleh data melalui POST daripada GET (const respon = menunggu axios.post()).
console.error() Digunakan untuk menulis pesan kesalahan ke konsol. Ini membantu dalam proses debug dengan menampilkan informasi kesalahan ketika item atau permintaan API tertentu gagal (console.error('Tombol halaman tidak ditemukan!').
$() Singkatan untuk memilih elemen di Puppeteer, sebanding dengan document.querySelector(). Skrip ini menggunakan tombol "Halaman Berikutnya" untuk menghasilkan acara klik penomoran halaman (const nextButton = menunggu halaman.$('.pagination-next').
click() Pendekatan ini mereplikasi klik pada elemen HTML. Dalam skrip, ini digunakan untuk menavigasi pager secara terprogram dengan mengklik tombol halaman yang tepat.

Menguasai Pagination Berbasis JavaScript dan Navigasi API

Skrip pertama yang diperkenalkan menggunakan JavaScript murni untuk menjelajahi halaman secara dinamis dengan penomoran halaman berbasis JavaScript. Ide dasar di balik metode ini adalah meniru pengguna yang menekan tombol pager dengan memilih dan mengaktifkan peristiwa klik pada elemen HTML yang sesuai. Dengan mengidentifikasi wadah penomoran halaman menggunakan perintah, kita dapat mengakses berbagai tombol halaman dan mengotomatiskan navigasi. Pendekatan ini ideal untuk kasus di mana mengubah URL secara manual bukanlah suatu pilihan dan Anda memerlukan antarmuka front-end yang cepat untuk berinteraksi dengan mekanisme penomoran halaman.

Di skrip kedua, kami menggunakan Puppeteer, paket Node.js untuk mengontrol browser tanpa kepala. Skrip ini tidak hanya mensimulasikan penekanan tombol pager, tetapi juga mengotomatiskan seluruh proses penjelajahan beberapa halaman, mengumpulkan semua link iklan pada setiap iterasi. Dalang memungkinkan Anda mengikis konten yang dimuat secara dinamis dengan berinteraksi langsung dengan elemen DOM, seperti yang dilakukan pengguna sebenarnya. Salah satu komponen utama di sini adalah , yang memungkinkan kode JavaScript dieksekusi dalam konteks halaman. Ini sempurna untuk mengumpulkan data seperti tautan iklan di seluruh halaman yang diberi nomor halaman.

Kedua skrip memerlukan penanganan kesalahan untuk memastikan bahwa proses otomatis berfungsi dengan baik meskipun bagian tertentu hilang atau API berperilaku tidak terduga. Misalnya, mencatat kesalahan apa pun yang ditemui selama eksekusi, seperti ketika tombol yang ditargetkan tidak ditemukan di halaman. Selain itu, Dalang perintah memastikan bahwa komponen dinamis, seperti tautan iklan, dimuat sepenuhnya sebelum skrip mencoba berinteraksi. Hal ini membuatnya sangat berguna ketika bekerja dengan situs web yang sangat bergantung pada JavaScript untuk merender konten, karena menghindari masalah yang disebabkan oleh pemuatan halaman yang hilang atau tidak lengkap.

Skrip yang sudah selesai menggunakan Axios, klien HTTP Node.js berdasarkan janji, di backend. Di sini, kami mencoba mengambil data langsung dari titik akhir API, yang menurut kesalahan HTTP 405, tidak diterima pertanyaan. Untuk menghindari hal ini, skrip mengirimkan a permintaan, yang mungkin disetujui oleh server. Metode ini lebih cocok untuk pengguna yang ingin mengekstrak data tanpa harus menavigasi front-end, namun melibatkan pemahaman struktur dan perilaku API server. Penanganan kesalahan menjamin bahwa setiap kegagalan permintaan API dilaporkan, sehingga lebih mudah untuk memecahkan masalah kesulitan pengambilan data sisi server.

Solusi 1: Meniru Klik pada Pager JavaScript Menggunakan JavaScript Vanilla

Pendekatan ini menggunakan JavaScript vanilla untuk memicu peristiwa klik pada tombol pager secara terprogram dengan memilih elemen DOM yang sesuai. Ini dapat diterapkan pada skenario front-end dinamis apa pun yang itemnya dirender dengan JavaScript.

// Select the pagination container
const pagerContainer = document.querySelector('.pagination');

// Function to trigger a click event on a pager button
function clickPageButton(pageNumber) {
  const buttons = pagerContainer.querySelectorAll('button');
  const targetButton = [...buttons].find(btn => btn.textContent === String(pageNumber));
  if (targetButton) {
    targetButton.click();
  } else {
    console.error('Page button not found!');
  }
}

// Example usage: clicking the 2nd page button
clickPageButton(2);

Solusi 2: Menggunakan Dalang untuk Mengotomatiskan Navigasi Pager dan Pengikisan Iklan.

Dalang, alat Node.js yang menyediakan API tingkat tinggi untuk mengoperasikan browser tanpa kepala, digunakan dengan cara ini untuk menavigasi pager JavaScript dan mengumpulkan tautan dari semua iklan. Ini adalah solusi back-end yang sering digunakan untuk pekerjaan pengikisan otomatis.

const puppeteer = require('puppeteer');

// Function to scrape all ad links from a paginated website
async function scrapeAds() {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://www.supralift.com/uk/itemsearch/results');

  let ads = [];
  let hasNextPage = true;

  while (hasNextPage) {
    // Scrape the ad links from the current page
    const links = await page.evaluate(() => {
      return Array.from(document.querySelectorAll('.ad-link-selector')).map(a => a.href);
    });
    ads.push(...links);

    // Try to click the next page button
    const nextButton = await page.$('.pagination-next');
    if (nextButton) {
      await nextButton.click();
      await page.waitForSelector('.ad-link-selector');
    } else {
      hasNextPage = false;
    }
  }

  await browser.close();
  return ads;
}

// Call the scraping function and log results
scrapeAds().then(ads => console.log(ads));

Solusi 3: Mengambil Data dari API Menggunakan Axios di Node.js

Metode ini berfokus pada pemanfaatan Axios di Node.js untuk mengambil data langsung dari API. Kesalahan 405 menunjukkan bahwa metode GET tidak diizinkan, oleh karena itu strategi ini menggunakan POST atau header lain untuk menghindari batasan tersebut. Hal ini sesuai untuk skenario back-end yang memerlukan interaksi API.

const axios = require('axios');

// Function to fetch data from the API using POST instead of GET
async function fetchData() {
  try {
    const response = await axios.post('https://www.supralift.com/api/search/item/summary', {
      headers: {
        'Content-Type': 'application/json'
      },
      data: { /* Add necessary POST body if applicable */ }
    });

    console.log(response.data);
  } catch (error) {
    console.error('Error fetching data:', error.response ? error.response.data : error.message);
  }
}

// Invoke the fetchData function
fetchData();

Mengoptimalkan Pagination JavaScript untuk Pengikisan Web dan Pengumpulan Data

Saat menjelajahi situs web dengan sistem penomoran halaman berbasis JavaScript, penting untuk menyelidiki beberapa metode untuk mengekstraksi data dengan cepat. Salah satu opsi yang terkadang diabaikan adalah mencegat permintaan jaringan yang dikeluarkan oleh mekanisme penomoran halaman. Dengan meninjau secara cermat kueri yang dilakukan di Alat Pengembang browser, terutama tab "Jaringan", Anda dapat menentukan titik akhir yang digunakan untuk mengambil data untuk setiap laman. Sistem berbasis JavaScript dapat digunakan atau permintaan untuk memuat data secara dinamis tanpa mengubah URL, berbeda dengan penomoran halaman tradisional yang memerlukan perubahan parameter URL.

Untuk mengekstrak tautan atau data dari situs web tersebut, intersepsi permintaan dan ambil data yang dikembalikannya. Dalang dan alat lainnya memungkinkan Anda memantau lalu lintas jaringan dan mengumpulkan data yang berguna. Ketika strategi ini tidak dapat diterapkan karena kendala sisi server, memahami perilaku API menjadi sangat penting. Beberapa API, seperti , mungkin melarang metode tertentu seperti dan hanya mengizinkan pertanyaan. Menyesuaikan kueri Anda agar sesuai dengan metode API yang dimaksudkan adalah solusi efektif untuk keterbatasan ini.

Terakhir, saat mengambil data yang diberi nomor halaman, penting untuk memberikan jeda yang sesuai di antara permintaan. Banyak situs web yang menggunakan algoritme pembatas kecepatan untuk mencegah penyalahgunaan, dan mengirimkan terlalu banyak permintaan secara berurutan dapat mengakibatkan alamat IP Anda dimasukkan ke dalam daftar hitam untuk sementara. Untuk menghindari deteksi dan memastikan ekstraksi data berhasil, sertakan penundaan acak antar kueri atau batasi jumlah permintaan bersamaan. Menggunakan alat seperti di Node.js dan penanganan laju yang tepat adalah pendekatan yang bagus untuk mencapai hal ini.

  1. Apa itu penomoran halaman berbasis JavaScript?
  2. Penomoran halaman berbasis JavaScript adalah cara tombol penomoran halaman menggunakan JavaScript untuk memuat materi baru secara dinamis, sering kali tanpa mengubah URL.
  3. Bagaimana cara mengambil data dari situs web dengan halaman JavaScript?
  4. Anda dapat menggunakan alat seperti atau untuk mengotomatiskan klik tombol penomoran halaman atau menangkap permintaan jaringan selama penomoran halaman.
  5. Mengapa API mengembalikan kesalahan 405 Metode Tidak Diizinkan?
  6. Hal ini terjadi karena API hanya mendukung metode HTTP tertentu. Misalnya, ini mungkin memblokir permintaan sambil mengizinkan permintaan.
  7. Bisakah saya mengubah URL untuk menavigasi halaman?
  8. Dalam penomoran halaman berbasis JavaScript, Anda sering kali tidak dapat mengubah URL secara langsung. Untuk melakukan navigasi, Anda perlu memicu peristiwa JavaScript atau menggunakan titik akhir API.
  9. Alat apa yang dapat saya gunakan untuk mengambil data yang diberi nomor halaman?
  10. Program pengikisan yang populer meliputi untuk otomatisasi browser dan untuk permintaan HTTP. Keduanya menangani konten yang diberi halaman secara efisien.

Bekerja dengan penomoran halaman berbasis JavaScript memerlukan kombinasi solusi front-end dan back-end. Baik Anda menggunakan Puppeteer untuk mengotomatiskan aktivitas browser atau Axios untuk berinteraksi langsung dengan titik akhir API, pengikisan yang efisien memerlukan desain dan eksekusi yang cermat.

Memahami bagaimana situs web memuat dan memproses data memungkinkan Anda menulis skrip yang efisien untuk mengekstrak informasi yang diperlukan. Untuk menghindari bahaya yang sering terjadi seperti kesalahan 405, berhati-hatilah dalam memantau lalu lintas jaringan, kelola batas kecepatan, dan gunakan metode HTTP yang tepat.

  1. Informasi rinci tentang penggunaan Dalang untuk web scraping dirujuk dari dokumentasi resmi Dalang. Dokumentasi Dalang
  2. Penjelasan metode HTTP dan penanganan permintaan API, khususnya seputar kesalahan 405 "Metode Tidak Diizinkan", berasal dari Dokumen Web MDN .
  3. Wawasan tentang Axios untuk membuat permintaan HTTP di Node.js bersumber dari pejabat tersebut Dokumentasi Aksio .
  4. Untuk manipulasi JavaScript DOM dan kejadian seperti click(), konten direferensikan dari Dokumen Web MDN .