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 enpackage.json
-fil.
- Inuti
package.json
, ändramain
-värdet tillindex.mjs
, om det inte redan är det. Du kan även lägga till nyckelntype
och sätta värdet tillmodule
.
{ "type": "module" }
- Lägg till
axios
som beroende genom att köranpm 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
iindex.mjs
medimport
, som används för ES-moduler. Om det vore en CommonJS-fil skulle man användarequire
.
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 sompost
, webbadressen inklusive API-slutpunkten, en ”header” som heterx-api-key
(vars värde är API-nyckeln från adminvista.com) och ettdata
-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 alternativendesktop
,mobile
ochtablet
, därdesktop
ä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.