Cara Menavigasi Laman Web Pager Berasaskan JavaScript dan Mengumpul Pautan

Pagination

Memahami Penomboran Berasaskan JavaScript dan Cabaran API

Tapak web dengan penomboran berasaskan JavaScript boleh menyukarkan pelawat untuk menavigasi bahan, terutamanya jika kawalan penomboran tidak mendedahkan sebarang parameter URL. Ini menjadikannya mustahil untuk mengubah suai atau mengautomasikan navigasi halaman menggunakan pendekatan konvensional seperti menukar pertanyaan URL. Adalah mungkin untuk melibatkan diri dengan alat kelui tersebut melalui kaedah yang berbeza.

Satu masalah sedemikian berlaku apabila cuba mendapatkan pautan atau data daripada jenis tapak web ini. Jika anda tidak dapat menavigasi ratusan halaman secara manual, pendekatan yang lebih baik ialah mensimulasikan peristiwa klik pada halaman JavaScript. Teknologi ini mengautomasikan prosedur navigasi, sangat memudahkan tugas pengumpulan data.

Dalam sesetengah keadaan, tab "Rangkaian" dalam Alat Pembangun penyemak imbas mungkin memaparkan titik akhir API yang menyediakan maklumat berguna. Walau bagaimanapun, melibatkan diri secara langsung dengan titik akhir ini kadangkala boleh menyebabkan masalah kerana mereka mungkin tidak membenarkan kaedah HTTP tertentu, seperti permintaan GET, yang biasanya digunakan untuk mendapatkan data.

Artikel ini menerangkan cara untuk mensimulasikan peristiwa klik pada halaman JavaScript tapak web dan cara menangani pengehadan API yang menyekat akses terus kepada data yang anda perlukan. Kami juga akan melihat cara untuk mengatasi had pada kaedah API tertentu untuk memastikan anda mengumpul semua maklumat penting dengan berkesan.

Perintah Contoh penggunaan
document.querySelector() Kaedah ini digunakan untuk memilih elemen pertama yang sepadan dengan pemilih CSS tertentu. Skrip menggunakannya untuk memilih bekas penomboran (const pagerContainer = document.querySelector('.pagination')) dan mengawal butang pager.
Array.from() Menukar objek seperti tatasusunan atau boleh lelar kepada tatasusunan yang betul. Skrip menukar NodeList pautan iklan kepada tatasusunan untuk manipulasi dan pemetaan yang lebih mudah (Array.from(document.querySelectorAll('.ad-link-selector')).
puppeteer.launch() Apabila digunakan dengan Puppeteer, arahan ini melancarkan contoh penyemak imbas tanpa kepala baharu. Ia menyokong tindakan penyemak imbas automatik seperti navigasi halaman dan simulasi interaksi pengguna (pelayar const = await puppeteer.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(() =>Dalam Puppeteer, kaedah ini membolehkan anda menjalankan kod JavaScript dalam konteks halaman web yang anda kawal. Ia digunakan di sini untuk mengekstrak pautan iklan daripada DOM (menunggu page.evaluate(() => {...})).
page.waitForSelector() Menunggu pemilih yang ditentukan untuk muncul pada halaman sebelum meneruskan, memastikan semua elemen dinamik dimuatkan. Ini amat penting apabila melayari kandungan berhalaman muka surat, kerana iklan baharu muncul dengan setiap perubahan halaman (tunggu page.waitForSelector('.ad-link-selector').
axios.post() Menghantar permintaan HTTP POST ke URL yang dibekalkan. Sampel cuba untuk mengelakkan isu 405 dengan mendapatkan data melalui POST dan bukannya GET (respon const = menunggu axios.post()).
console.error() Digunakan untuk menulis mesej ralat ke konsol. Ia membantu dengan penyahpepijatan dengan memaparkan maklumat ralat apabila item tertentu atau permintaan API gagal (console.error('Butang halaman tidak ditemui!').
$() Pendek kata untuk memilih elemen dalam Puppeteer, setanding dengan document.querySelector(). Skrip ini menggunakan butang "Halaman Seterusnya" untuk menjana acara klik penomboran (const nextButton = halaman tunggu.$('.pagination-next').
click() Pendekatan ini mereplikasi satu klik pada elemen HTML. Dalam skrip, ia digunakan untuk menavigasi kelui secara pengaturcaraan dengan mengklik pada butang halaman yang betul.

Menguasai Penomboran Berasaskan JavaScript dan Navigasi API

Skrip pertama yang diperkenalkan menggunakan JavaScript tulen untuk meneroka halaman secara dinamik dengan penomboran berasaskan JavaScript. Idea asas di sebalik kaedah ini adalah untuk meniru pengguna yang menekan butang kelui dengan memilih dan mengaktifkan acara klik pada elemen HTML yang sesuai. Dengan mengenal pasti bekas penomboran menggunakan arahan, kita boleh mengakses pelbagai butang halaman dan mengautomasikan navigasi. Pendekatan ini sesuai untuk kes yang menukar URL secara manual bukan pilihan dan anda memerlukan antara muka hadapan yang pantas untuk terlibat dengan mekanisme penomboran.

Dalam skrip kedua, kami menggunakan Puppeteer, pakej Node.js untuk mengawal penyemak imbas tanpa kepala. Skrip ini bukan sahaja mensimulasikan penekanan butang kelui, tetapi ia juga mengautomasikan keseluruhan proses mengembara ke banyak halaman, mengumpulkan semua pautan iklan dengan setiap lelaran. Puppeteer membenarkan anda mengikis kandungan yang dimuatkan secara dinamik dengan berinteraksi secara langsung dengan elemen DOM, sama seperti pengguna sebenar. Salah satu komponen utama di sini ialah , yang membolehkan kod JavaScript dilaksanakan dalam konteks halaman. Ini sesuai untuk mengumpul data seperti pautan iklan merentas halaman berhalaman muka surat.

Kedua-dua skrip memerlukan pengendalian ralat untuk memastikan proses automatik berfungsi dengan baik walaupun bahagian tertentu tiada atau API bertindak secara tidak dijangka. Sebagai contoh, merekodkan sebarang ralat yang dihadapi semasa pelaksanaan, seperti apabila butang yang disasarkan tidak ditemui pada halaman. Selain itu, Puppeteer's arahan memastikan bahawa komponen dinamik, seperti pautan iklan, dimuatkan sepenuhnya sebelum skrip cuba berinteraksi. Ini menjadikannya sangat berguna apabila bekerja dengan tapak web yang banyak bergantung pada JavaScript untuk memaparkan kandungan, kerana ia mengelakkan masalah yang disebabkan oleh pemuatan halaman yang hilang atau tidak lengkap.

Skrip siap menggunakan Axios, klien HTTP Node.js berdasarkan janji, pada bahagian belakang. Di sini, kami cuba untuk mengambil data terus dari titik akhir API, yang, menurut ralat HTTP 405, tidak menerima pertanyaan. Untuk mengelakkan ini, skrip menghantar a permintaan, yang mungkin diluluskan oleh pelayan. Kaedah ini lebih sesuai untuk pengguna yang ingin mengekstrak data tanpa perlu menavigasi bahagian hadapan, tetapi ia melibatkan pemahaman struktur dan tingkah laku API pelayan. Pengendalian ralat menjamin bahawa sebarang kegagalan permintaan API dilaporkan, menjadikannya lebih mudah untuk menyelesaikan masalah mendapatkan data sebelah pelayan.

Penyelesaian 1: Meniru Klik pada Kelui JavaScript Menggunakan JavaScript Vanila

Pendekatan ini menggunakan JavaScript vanila untuk mencetuskan acara klik pada butang kelui secara pemprograman dengan memilih elemen DOM yang sesuai. Ini boleh digunakan pada mana-mana senario bahagian hadapan dinamik di mana item dipaparkan 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);

Penyelesaian 2: Menggunakan Puppeteer untuk Mengautomasikan Navigasi Pager dan Pengikisan Iklan.

Puppeteer, alat Node.js yang menyediakan API peringkat tinggi untuk mengendalikan penyemak imbas tanpa kepala, digunakan dengan cara ini untuk menavigasi kelui JavaScript dan mengumpul pautan daripada semua pengiklanan. Ia adalah penyelesaian bahagian belakang yang kerap digunakan untuk kerja mengikis automatik.

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));

Penyelesaian 3: Mengambil Data daripada API Menggunakan Axios dalam Node.js

Kaedah ini memfokuskan pada menggunakan Axios dalam Node.js untuk mendapatkan data terus daripada API. Ralat 405 menunjukkan bahawa kaedah GET tidak dibenarkan, oleh itu strategi ini menggunakan POST atau pengepala lain untuk memintas sekatan. Ini sesuai untuk senario bahagian belakang 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();

Mengoptimumkan Penomboran JavaScript untuk Pengikisan Web dan Pengumpulan Data

Apabila meneroka tapak web dengan sistem penomboran berasaskan JavaScript, adalah penting untuk menyiasat beberapa kaedah untuk mengekstrak data dengan cepat. Satu pilihan yang kadangkala diabaikan ialah memintas permintaan rangkaian yang dikeluarkan oleh mekanisme penomboran. Dengan menyemak dengan teliti pertanyaan yang dilakukan dalam Alat Pembangun penyemak imbas, terutamanya tab "Rangkaian", anda boleh menentukan titik akhir yang digunakan untuk mengambil data bagi setiap halaman. Sistem berasaskan JavaScript boleh digunakan atau permintaan untuk memuatkan data secara dinamik tanpa menukar URL, berbanding penomboran tradisional yang memerlukan perubahan parameter URL.

Untuk mengekstrak pautan atau data daripada tapak web tersebut, pintas permintaan dan dapatkan semula data yang dikembalikan. Puppeteer dan alatan lain membolehkan anda memantau trafik rangkaian dan mengumpulkan data berguna. Apabila strategi ini tidak dapat dipraktikkan kerana kekangan sebelah pelayan, pemahaman tingkah laku API menjadi kritikal. Beberapa API, seperti , boleh melarang kaedah tertentu seperti dan hanya membenarkan pertanyaan. Menyesuaikan pertanyaan anda agar sepadan dengan kaedah yang dimaksudkan oleh API ialah penyelesaian yang berkesan untuk pengehadan ini.

Akhir sekali, semasa mengikis data penomboran, adalah penting untuk membenarkan jeda yang sesuai antara permintaan. Banyak tapak web menggunakan algoritma pengehadan kadar untuk mengelakkan penyalahgunaan, dan menghantar terlalu banyak permintaan secara berturut-turut boleh menyebabkan alamat IP anda disenaraihitamkan buat sementara waktu. Untuk mengelakkan pengesanan dan memastikan pengekstrakan data berjaya, sertakan kelewatan rawak antara pertanyaan atau hadkan bilangan permintaan serentak. Menggunakan alatan seperti dalam Node.js dan pengendalian kadar yang betul ialah pendekatan yang bagus untuk mencapai matlamat ini.

  1. Apakah penomboran berasaskan JavaScript?
  2. Penomboran berasaskan JavaScript ialah cara butang penomboran menggunakan JavaScript untuk memuatkan bahan segar secara dinamik, dengan kerap tanpa mengubah URL.
  3. Bagaimanakah saya boleh mengikis data daripada tapak web bernombor JavaScript?
  4. Anda boleh menggunakan alat seperti atau untuk mengautomasikan klik butang penomboran atau menangkap permintaan rangkaian semasa penomboran.
  5. Mengapa API mengembalikan ralat Kaedah 405 Tidak Dibenarkan?
  6. Ini berlaku kerana API hanya menyokong kaedah HTTP tertentu. Sebagai contoh, ia mungkin menyekat permintaan sambil membenarkan permintaan.
  7. Bolehkah saya mengubah suai URL untuk menavigasi halaman?
  8. Dalam penomboran berasaskan JavaScript, anda selalunya tidak boleh mengubah URL secara langsung. Untuk menavigasi, anda perlu mencetuskan acara JavaScript atau menggunakan titik akhir API.
  9. Apakah alatan yang boleh saya gunakan untuk mengikis data bernombor?
  10. Program mengikis popular termasuk untuk automasi pelayar dan untuk permintaan HTTP. Kedua-duanya mengendalikan kandungan penomboran dengan cekap.

Bekerja dengan penomboran berasaskan JavaScript memerlukan gabungan penyelesaian bahagian hadapan dan bahagian belakang. Sama ada anda menggunakan Puppeteer untuk mengautomasikan aktiviti penyemak imbas atau Axios untuk antara muka terus dengan titik akhir API, pengikisan yang cekap memerlukan reka bentuk dan pelaksanaan yang teliti.

Memahami cara tapak web memuatkan dan memproses data membolehkan anda menulis skrip yang cekap untuk mengekstrak maklumat yang diperlukan. Untuk mengelakkan bahaya yang kerap seperti ralat 405, berhati-hati untuk memantau trafik rangkaian, mengurus had kadar dan menggunakan kaedah HTTP yang betul.

  1. Maklumat terperinci tentang penggunaan Puppeteer untuk mengikis web telah dirujuk daripada dokumentasi Puppeteer rasmi. Dokumentasi Puppeteer
  2. Penjelasan kaedah HTTP dan pengendalian permintaan API, khususnya sekitar ralat 405 "Kaedah Tidak Dibenarkan", diperoleh daripada Dokumen Web MDN .
  3. Cerapan tentang Axios untuk membuat permintaan HTTP dalam Node.js diperoleh daripada rasmi Dokumentasi Axios .
  4. Untuk manipulasi DOM JavaScript dan peristiwa seperti klik(), kandungan dirujuk daripada Dokumen Web MDN .