Kaip naršyti „JavaScript“ pagrįstose puslapiuose ir rinkti nuorodas

Pagination

„JavaScript“ pagrįsto puslapių kūrimo ir API iššūkių supratimas

Svetainės su „JavaScript“ puslapių puslapiais gali apsunkinti lankytojų naršymą po medžiagą, ypač jei puslapių skirstymo valdikliai neatskleidžia jokių URL parametrų. Dėl to neįmanoma keisti ar automatizuoti puslapio naršymo naudojant įprastus metodus, pvz., keičiant URL užklausas. Su tokiais gavikliais galima susisiekti įvairiais būdais.

Viena iš tokių problemų kyla bandant gauti nuorodas arba duomenis iš tokio tipo svetainių. Jei negalite rankiniu būdu naršyti šimtų puslapių, geresnis būdas yra imituoti paspaudimų įvykius „JavaScript“ puslapiuose. Ši technologija automatizuoja navigacijos procedūrą, labai supaprastindama duomenų rinkimo pareigas.

Tam tikromis aplinkybėmis naršyklės kūrėjo įrankių skirtuke „Tinklas“ gali būti rodomi API galutiniai taškai, teikiantys naudingos informacijos. Tačiau tiesiogiai naudojant šiuos galinius taškus kartais gali kilti problemų, nes jie gali neleisti tam tikrų HTTP metodų, pvz., GET užklausų, kurios dažniausiai naudojamos duomenims gauti.

Šiame straipsnyje paaiškinama, kaip imituoti paspaudimų įvykius svetainės „JavaScript“ puslapiuose ir kaip elgtis su API apribojimais, ribojančiais tiesioginę prieigą prie jums reikalingų duomenų. Taip pat ieškosime būdų, kaip apeiti konkrečių API metodų apribojimus, kad užtikrintume, jog visą svarbią informaciją rinktumėte efektyviai.

komandą Naudojimo pavyzdys
document.querySelector() Šis metodas naudojamas norint pasirinkti pirmąjį elementą, atitinkantį nurodytą CSS parinkiklį. Scenarijus jį naudoja puslapių rūšiavimo konteineriui pasirinkti (const pagerContainer = document.querySelector('.pagination')) ir gaviklio mygtukų valdymui.
Array.from() Konvertuoja į masyvą panašų arba kartojamą objektą į tinkamą masyvą. Scenarijus konvertuoja skelbimų nuorodų NodeList į masyvą, kad būtų lengviau manipuliuoti ir susieti (Array.from(document.querySelectorAll('.ad-link-selector')).
puppeteer.launch() Kai naudojama su Puppeteer, ši komanda paleidžia naują naršyklės egzempliorių be galvos. Jis palaiko automatinius naršyklės veiksmus, tokius kaip puslapio naršymas ir naudotojo sąveikos modeliavimas (const naršyklė = laukti 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(() =>„Puppeteer“ šis metodas leidžia paleisti „JavaScript“ kodą valdomo tinklalapio kontekste. Čia jis naudojamas norint išgauti skelbimų nuorodas iš DOM (laukti puslapio.evaluate(() => {...})).
page.waitForSelector() Prieš tęsdamas laukia, kol puslapyje pasirodys nurodytas parinkiklis, užtikrinant, kad būtų įkelti visi dinaminiai elementai. Tai ypač svarbu naršant po puslapių turinį, nes su kiekvienu puslapio pakeitimu pasirodo nauji skelbimai (laukti page.waitForSelector('.ad-link-selector').
axios.post() Siunčia HTTP POST užklausą pateiktu URL. Pavyzdys bando išvengti 405 problemos gaudamas duomenis per POST, o ne GET (const response = laukti axios.post()).
console.error() Naudojamas klaidų pranešimams rašyti į konsolę. Tai padeda derinti, nes rodo klaidos informaciją, kai tam tikri elementai arba API užklausos nepavyksta (console.error('Puslapio mygtukas nerastas!').
$() Puppeteer elementų pasirinkimo trumpinys, panašus į document.querySelector(). Šis scenarijus naudoja mygtuką „Kitas puslapis“, kad sugeneruotų puslapių keitimo paspaudimo įvykį (const nextButton = laukti puslapio.$('.pagination-next').
click() Šis metodas atkartoja HTML elemento paspaudimą. Skriptuose jis naudojamas programiškai naršyti gaviklį spustelėjus atitinkamą puslapio mygtuką.

„JavaScript“ pagrįsto puslapių ir API naršymo įvaldymas

Pirmasis pristatytas scenarijus naudoja gryną „JavaScript“, kad dinamiškai naršytų puslapį su „JavaScript“ pagrįstu puslapiu. Pagrindinė šio metodo idėja yra imituoti vartotoją, paspaudžiantį gaviklio mygtukus, pasirenkant ir suaktyvinant atitinkamų HTML elementų paspaudimų įvykius. Atpažindami puslapių rūšiavimo konteinerį naudodami komandą, galime pasiekti įvairius puslapio mygtukus ir automatizuoti naršymą. Šis metodas idealiai tinka tais atvejais, kai rankiniu būdu negalima keisti URL ir norint prisijungti prie puslapių rūšiavimo mechanizmo, reikalinga greita sąsaja.

Antrajame scenarijuje naudojome Puppeteer, Node.js paketą, kad valdytume naršyklę be galvos. Šis scenarijus ne tik imituoja gaviklio mygtukų paspaudimus, bet ir automatizuoja visą kelionės per daugybę puslapių procesą, surenkant visas skelbimų nuorodas su kiekviena iteracija. „Puppeteer“ leidžia iškrapštyti dinamiškai įkeltą turinį tiesiogiai sąveikaujant su DOM elementais, panašiai kaip tai darytų tikras vartotojas. Vienas iš pagrindinių komponentų čia yra , kuri leidžia „JavaScript“ kodą vykdyti puslapio kontekste. Tai puikiai tinka duomenims, pvz., skelbimų nuorodoms puslapiuose su puslapiais, rinkti.

Abu scenarijai reikalauja klaidų tvarkymo, kad automatizuotas procesas veiktų gerai, net jei trūksta konkrečių dalių arba API veikia netikėtai. Pavyzdžiui, registruoja visas vykdymo metu aptiktas klaidas, pvz., kai puslapyje nerastas tikslinis mygtukas. Be to, Puppeteer's komanda užtikrina, kad dinaminiai komponentai, pvz., skelbimų nuorodos, būtų visiškai įkelti prieš scenarijui bandant sąveikauti. Tai labai patogu dirbant su svetainėmis, kurios labai priklauso nuo „JavaScript“, kad būtų pateiktas turinys, nes taip išvengiama problemų, kylančių dėl trūkstamo arba nebaigto puslapio įkėlimo.

Baigtas scenarijus naudoja Axios, Node.js HTTP klientą, pagrįstą pažadais. Čia mes bandome gauti duomenis tiesiai iš API galutinio taško, kuris pagal HTTP 405 klaidą nepriima užklausų. Norėdami to išvengti, scenarijus siunčia a užklausą, kurią gali patvirtinti serveris. Šis metodas labiau tinka vartotojams, kurie nori išgauti duomenis neperžengdami priekinės dalies, tačiau jis apima serverio API struktūros ir veikimo supratimą. Klaidų apdorojimas garantuoja, kad bus pranešta apie bet kokias API užklausų klaidas, todėl bus lengviau pašalinti serverio duomenų gavimo sunkumus.

1 sprendimas: „JavaScript“ gaviklio paspaudimų imitavimas naudojant „Vanilla JavaScript“.

Šis metodas naudoja vanilinį JavaScript, kad programiškai suaktyvintų gaviklio mygtukų paspaudimo įvykį, pasirinkus atitinkamus DOM elementus. Tai gali būti taikoma bet kuriam dinaminei sąsajai, kai elementai pateikiami naudojant „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);

2 sprendimas: naudokite „Puppeteer“, kad automatizuotumėte gaviklio navigaciją ir skelbimų rinkimą.

Puppeteer, Node.js įrankis, teikiantis aukšto lygio API naršyklei be galvos valdyti, tokiu būdu naudojamas naršyti „JavaScript“ puslapyje ir rinkti nuorodas iš visų reklamų. Tai galinis sprendimas, dažnai naudojamas automatizuotoms grandymo darbams atlikti.

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

3 sprendimas: duomenų gavimas iš API naudojant „Axios“ Node.js

Šis metodas skirtas naudoti „Axios“ sistemoje „Node.js“, kad būtų galima gauti duomenis tiesiai iš API. 405 klaida rodo, kad GET metodas neleidžiamas, todėl ši strategija naudoja POST arba kitas antraštes, kad apeitų apribojimą. Tai tinka vidiniam scenarijui, kai reikalinga API sąveika.

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

„JavaScript“ puslapių spausdinimo optimizavimas žiniatinklio rinkimui ir duomenų rinkimui

Tyrinėjant svetaines su „JavaScript“ puslapių rūšiavimo sistema, labai svarbu ištirti keletą būdų, kaip greitai išgauti duomenis. Viena kartais ignoruojama parinktis yra perimti tinklo užklausas, kurias pateikia puslapių rūšiavimo mechanizmas. Atidžiai peržiūrėdami užklausas, atliktas naršyklės kūrėjo įrankiuose, ypač skirtuke „Tinklas“, galite nustatyti galutinius taškus, naudojamus kiekvieno puslapio duomenims gauti. Gali būti naudojamos JavaScript pagrįstos sistemos arba užklausas dinamiškai įkelti duomenis nekeičiant URL, o ne įprastą puslapių rūšiavimą, kai reikia keisti URL parametrus.

Norėdami išgauti nuorodas ar duomenis iš tokių svetainių, perimkite užklausas ir gaukite jų grąžintus duomenis. „Puppeteer“ ir kiti įrankiai leidžia stebėti tinklo srautą ir rinkti naudingus duomenis. Kai ši strategija neįgyvendinama dėl serverio suvaržymų, labai svarbu suprasti API elgesį. Kai kurios API, pvz , gali uždrausti konkrečius metodus, pvz ir tik leisti užklausų. Užklausų pritaikymas, kad jos atitiktų API numatytą metodą, yra veiksmingas šių apribojimų sprendimas.

Galiausiai, nuskaitant puslapių puslapius, labai svarbu leisti tinkamas pauzes tarp užklausų. Daugelis svetainių naudoja greitį ribojančius algoritmus, kad išvengtų piktnaudžiavimo, o siunčiant per daug užklausų iš eilės, jūsų IP adresas gali būti laikinai įtrauktas į juodąjį sąrašą. Kad išvengtumėte aptikimo ir užtikrintumėte sėkmingą duomenų ištraukimą, įtraukite atsitiktinį delsą tarp užklausų arba apribokite vienu metu pateikiamų užklausų skaičių. Naudojant tokias priemones kaip Node.js ir tinkamas tarifų tvarkymas yra puikus būdas tai pasiekti.

  1. Kas yra „JavaScript“ puslapių kūrimas?
  2. „JavaScript“ pagrįstas puslapių numeravimas yra būdas, kuriuo puslapių numeravimo mygtukai naudoja „JavaScript“, kad dinamiškai įkeltų naują medžiagą, dažnai nekeičiant URL.
  3. Kaip galiu nuskaityti duomenis iš svetainės su JavaScript puslapiais?
  4. Galite naudoti tokius įrankius kaip arba Norėdami automatizuoti puslapių rūšiavimo mygtukų paspaudimus arba užfiksuoti tinklo užklausas puslapių rūšiavimo metu.
  5. Kodėl API pateikia klaidą 405 metodas neleidžiamas?
  6. Taip nutinka todėl, kad API palaiko tik tam tikrus HTTP metodus. Pavyzdžiui, jis gali užblokuoti prašymus leidžiant prašymus.
  7. Ar galiu pakeisti URL, kad galėčiau naršyti puslapiuose?
  8. „JavaScript“ puslapiuose dažnai negalite tiesiogiai pakeisti URL. Norėdami naršyti, turėsite suaktyvinti „JavaScript“ įvykius arba naudoti API galinius taškus.
  9. Kokius įrankius galiu naudoti puslapių duomenims rinkti?
  10. Populiarios grandymo programos apima naršyklės automatizavimui ir HTTP užklausoms. Abi efektyviai tvarko puslapių turinį.

Norint dirbti su „JavaScript“ puslapių rūšiavimu, reikia derinti priekinės ir galinės dalies sprendimus. Nesvarbu, ar naudojate „Puppeteer“ naršyklės veiklai automatizuoti, ar „Axios“, kad susijungtumėte tiesiogiai su API galutiniais taškais, efektyviam nuskaitymui reikia kruopštaus projektavimo ir vykdymo.

Suprasdami, kaip svetainė įkelia ir apdoroja duomenis, galite rašyti efektyvius scenarijus, kad išgautumėte reikiamą informaciją. Norėdami išvengti dažnų pavojų, pvz., 405 klaidos, atidžiai stebėkite tinklo srautą, valdykite greičio ribas ir naudokite tinkamus HTTP metodus.

  1. Išsami informacija apie „Puppeteer“ naudojimą žiniatinklyje buvo pateikta oficialioje „Puppeteer“ dokumentacijoje. Lėlininko dokumentacija
  2. HTTP metodų ir API užklausų apdorojimo paaiškinimas, ypač apie 405 klaidą „Metodas neleidžiamas“, buvo gautas iš MDN žiniatinklio dokumentai .
  3. Įžvalgos apie Axios, skirtos HTTP užklausoms Node.js teikti, buvo gautos iš pareigūno Axios dokumentacija .
  4. „JavaScript“ DOM manipuliavimo ir įvykių, pvz., click(), turinys buvo nurodytas iš MDN žiniatinklio dokumentai .