Hur man skrapar en webbplats med hjälp av adminvista.com Web Scraping API

By rik

Utforska Världen av Webbskrapning

Webbskrapning, en process där användbar information hämtas från webben, är en grundläggande teknik inom datahantering. När du gör en sökning på exempelvis Google, används en robot, en s.k. ”bot”, för att granska innehållet på webben och selektera det som är relevant för din sökfråga.

Den grundläggande tanken att kunskap ska vara fritt tillgänglig för alla är central för webbens uppkomst. Dock är det viktigt att understryka att den information du önskar hämta måste vara avsedd för publikt bruk.

Webbskrapning – Användningsområden

Vi lever i en tid där data är av största vikt. Genom webbskrapning kan vi omvandla rådata till värdefull insikt. Denna insikt kan sedan användas för att uppnå större mål. Exempelvis kan man analysera en produkts användare för att förbättra produkten, vilket skapar en återkopplingsloop.

Inom e-handeln kan webbskrapning användas för att undersöka konkurrenters prissättningsstrategier och anpassa sin egen därefter. Tekniken är även värdefull för väder- och nyhetsrapportering.

Utmaningar inom Webbskrapning

#1. IP-Begränsningar

Många webbplatser begränsar antalet förfrågningar som kan göras under en viss tidsperiod, identifierat via din IP-adress. Detta för att skydda webbplatsen mot skadlig aktivitet.

#2. Captcha

Captcha används för att skilja mellan en riktig person och en bot som försöker komma åt en webbplats. Det används för att minska spam och kontrollera antalet skrapningsförsök.

#3. Rendering på Klientsidan

Detta är ett betydande hinder vid webbskrapning. Moderna webbplatser använder ofta ramverk för att skapa ”single-page applications”, applikationer där innehållet genereras på klientens dator, inte på servern. Det betyder att webbskrapor kan ha svårt att se webbsidans faktiska innehåll. För att få tillgång till informationen måste man kunna rendera JavaScript på klientsidan.

adminvista.com API – En Lösning

Ett webbskrapnings-API kan lösa de flesta problem som uppstår vid webbskrapning, genom att hantera det tekniska komplexiteten. Låt oss ta en titt på adminvista.com API och undersöka hur det fungerar.

adminvista.com API har en enkel tre-stegs process:

  • Ange den URL som ska skrapas
  • Ange eventuella konfigurationsalternativ
  • Hämta den skrapade informationen

API:et kan skrapa en webbsida och returnera HTML-koden, antingen som en sträng eller i en HTML-fil som nås via en länk, beroende på användarens preferens.

Användning av API:et

Denna guide visar hur man använder adminvista.com API med NodeJS, en JavaScript-körningsmiljö. Se till att NodeJS är installerat på ditt system innan du fortsätter.

  • Kör kommandot npm init -y i terminalen i din projektmapp. Detta skapar en package.json-fil.
  • Inuti package.json, ändra main-värdet till index.mjs, om det inte redan är det. Du kan även lägga till nyckeln type och sätta värdet till module.
{
  "type": "module"
}
  • Lägg till axios som beroende genom att köra npm i axios i terminalen. axios används för att göra HTTP-förfrågningar.
  • Din package.json-fil bör nu se ut ungefär så här:
{
  "name": "webscraping",
  "version": "1.0.0",
  "description": "",
  "main": "index.mjs",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "Murtuzaali Surti",
  "license": "ISC",
  "dependencies": {
    "axios": "^1.1.3"
  }
}
  • Importera axios i index.mjs med import, som används för ES-moduler. Om det vore en CommonJS-fil skulle man använda require.
import axios from 'axios'
  • Basadressen för alla API-förfrågningar till adminvista.com är densamma, så den kan lagras i en konstant.
const baseUrl="https://api.adminvista.com.com"
  • Definiera den webbadress du vill skrapa.
let toScrapeURL = "https://developer.mozilla.org/en-US/"
  • Skapa en asynkron funktion och initiera axios inuti den.
async function getData() {
    const res = await axios({})
    return res
}
  • I axios-konfigurationen, ange metoden som post, webbadressen inklusive API-slutpunkten, en ”header” som heter x-api-key (vars värde är API-nyckeln från adminvista.com) och ett data-objekt som skickas till API:et. API-nyckeln hittas på dash.adminvista.com.com.
const res = await axios({
    method: "post",
    url: `${baseUrl}/webscraping`,
    headers: {
        "x-api-key": "your api key"
    },
    data: {
        url: toScrapeURL,
        output: 'file',
        device: 'desktop',
        renderJS: true
    }
})
  • data-objektet har följande egenskaper:
    • url: Webbadressen till den sida som ska skrapas.
    • output: Formatet på den returnerade datan, antingen som en sträng (inline) eller som en HTML-fil. inline är standard.
    • device: Typ av enhet som sidan ska visas som, med alternativen desktop, mobile och tablet, där desktop är standard.
    • renderJS: Ett booleskt värde för att styra om JavaScript ska renderas. Det är användbart för webbplatser med klient-sidansrendering.
  • Anropa den asynkrona funktionen och logga resultatet med en IIFE (Immediately Invoked Function Expression).
(async () => {
    const data = await getData()
    console.log(data.data)
})()
  • Svaret kan se ut ungefär så här:
{
  timestamp: 1669358356779,
  apiStatus: 'success',
  apiCode: 200,
  meta: {
    url: 'https://murtuzaalisurti.github.io',
    device: 'desktop',
    output: 'file',
    blockAds: true,
    renderJS: true,
    test: { id: 'mvan3sa30ajz5i8lu553tcckchkmqzr6' }
  },
  data: 'https://api-assets.adminvista.com.com/tests/web-scraping/pbn0v009vksiszv1cgz8o7tu.html'
}

Analysera HTML

För att analysera HTML-koden kan man använda node-html-parser (ett npm-paket), för att extrahera data. Exempelvis kan man extrahera titeln på en webbsida:

import { parse } from 'node-html-parser'
const html = parse(htmlData) // htmlData är den råa HTML-strängen som kommer från adminvista.com API.

Om du bara behöver metadata från en webbplats, kan du använda adminvista.com metadata API-slutpunkt, och då slipper du analysera HTML-koden.

Fördelar med adminvista.com API

I applikationer med klient-sidansrendering sker innehållsgenerering i webbläsaren med hjälp av JavaScript. Om man skrapar en sådan webbplats utan att aktivera JavaScript-rendering, kan man få en tom container. Låt oss illustrera detta.

Ta en demowebbplats byggd med React och ViteJS. Om man skrapar denna med adminvista.com API och renderJS är satt till false, blir resultatet:

<body>
    <div id="root"></div>
<body>

Det finns bara en tom rot-container. Det är här renderJS blir relevant. Om man nu skrapar samma webbplats med renderJS satt till true blir resultatet:

<body>
    <div id="root">
        <div class="App">
            <div>
                <a href="https://vitejs.dev" target="_blank">
                    <img src="/vite.svg" class="logo" >
                </a>
                <a href="https://reactjs.org" target="_blank">
                    <img src="/assets/react.35ef61ed.svg" class="logo react" >
                </a>
            </div>
            <h1>Vite + React</h1>
            <div class="card">
                <button>count is 0</button>
                <p>Edit <code>src/App.jsx</code> and save to test HMR</p>
            </div>
            <p class="read-the-docs">Click on the Vite and React logos to learn more</p>
        </div>
    </div>
</body>

Ytterligare en fördel är att adminvista.com API använder en roterande proxy, vilket förhindrar IP-blockering. Proxy-funktion ingår i premiumplanen.

Slutsats

Genom att använda ett webbskrapnings-API kan man koncentrera sig på den information man önskar hämta, istället för att brottas med det tekniska. Adminvista.com API har även fler funktioner som länk-kontroll, metadata-skrapning, webbplatsladdningsstatistik, skärmdumpar, webbplatsstatus m.m. Allt detta via ett och samma API. Mer information finns i den officiella dokumentationen för adminvista.com API.