Hva er Metaskraping og hvordan fungerer det?
Nettskraping dreier seg om å hente data fra et nettsted ved å analysere HTML-koden som genereres når en nettside lastes inn. I en mer spesifikk kontekst, kalles det metaskraping når man trekker ut metadata fra en nettsides metatagger.
Metadataene for en nettside er strukturert informasjon om selve siden, men ikke det faktiske innholdet. Denne informasjonen kan inkludere forfatterens navn, sidens tittel, en kort beskrivelse av innholdet og annen relevant informasjon. Slik metadata er viktige for å hjelpe både brukere og søkemotorer å forstå hva siden omhandler. Metaskraping gir en effektiv måte å samle inn denne type informasjon om en rekke nettsider på kort tid.
Det finnes flere metoder for å hente metadata fra nettsider. Disse inkluderer manuell skraping, bruk av spesialiserte biblioteker i programmeringsspråk, eller ved å benytte seg av en API-tjeneste som for eksempel tipsbilk.net Metascraping API.
Forskjellige Metoder for Metaskraping
Ved manuell metaskraping kan man bruke verktøy som Chrome DevTools for å inspisere elementer og hente metadata fra «Elementer»-fanen. Dette er tidkrevende og tungvint når det gjelder mange sider. Det finnes mer effektive alternativer:
En tilnærming er å skrive kode fra bunnen av. Dette innebærer å sende en HTTP-forespørsel til nettstedet og deretter analysere HTML-svaret ved hjelp av regulære uttrykk eller mønstermatching. Denne metoden er imidlertid tidkrevende da man i praksis skaper kode som allerede finnes i biblioteker.
En annen tilnærming er å bruke biblioteker i det ønskede programmeringsspråket. Dette gir et abstraksjonslag som forenkler prosessen. Ulempen er at man kan være begrenset dersom biblioteket ikke støttes i det spesifikke språket eller miljøet man bruker.
Den tredje tilnærmingen er å bruke en ferdig API som tipsbilk.net Metascraping API. Fordelen med denne metoden er at den gir et enhetlig grensesnitt uavhengig av programmeringsspråk. API-et kan brukes fra alle språk som støtter HTTP-forespørsler, og er derfor en fleksibel løsning.
I denne artikkelen skal vi se på hvordan tipsbilk.net Metascraping API brukes sammen med cURL, PHP og JavaScript (NodeJS).
Fordelene ved å benytte seg av tipsbilk.net API i forhold til de andre tilnærmingene er:
- API-et er uavhengig av språk og kjøretidsmiljø.
- Man unngår å gjenoppfinne hjulet og sparer tid på koding.
- Effektiv skraping av flere nettsteder på kort tid.
- Brukervennlighet.
- Mulighet for gratis bruk.
Kom i Gang med tipsbilk.net API
For å benytte tipsbilk.net API, trenger man en API-nøkkel. For å få denne, må man registrere en gratis konto på tipsbilk.net sin nettside. Etter registrering og innlogging på dashbordet, skal API-nøkkelen være synlig.
API-endepunktet er lokalisert på https://api.tipsbilk.net.com/metascraping. Når en forespørsel sendes, skal API-nøkkelen inkluderes som en forespørselsoverskrift med navnet «x-api-key», og verdien skal være den personlige API-nøkkelen.
I tillegg må flere parametere inkluderes i forespørselsteksten, inkludert url, enhet og proxyCountry.
- URL: angir URL-en til nettsiden man ønsker å skrape metadata fra.
- Enhet: spesifiserer enheten som brukes ved skraping, enten mobil eller stasjonær.
- ProxyCountry: angir landet som forespørselen skal sendes fra. Denne funksjonen er premium og er kun tilgjengelig i betalte abonnement.
Forespørslene må være POST-forespørsler da GET-forespørsler ikke kan inneholde metadata i forespørselsteksten.
I det første eksempelet vil vi bruke cURL-verktøyet fra kommandolinjen for å utføre en forespørsel mot Metascraping API. Først må cURL installeres.
Vi bruker en Bash-terminal, som er standard på macOS og Linux. For Windows-brukere, kan Git Bash installeres.
Etter installasjon av cURL, kan kommandoen brukes til å sende forespørselen. Kommandoen vil kreve flere parametere: forespørselsmetode, endepunkt, forespørselstekst og forespørselshoder.
curl -X POST https://api.tipsbilk.net.com/metascraping -d '{ "url": "https://tesla.com" }' -H 'Content-Type: application/json' -H 'x-api-key: <API_KEY>'
Merk: Skråstrek på slutten av de første linjene gjør at kommandoen kan deles opp på flere linjer for å øke lesbarheten.
Denne kommandoen spesifiserer HTTP-metoden som POST og endepunktet som Metascraping API-endepunktet.
Vi sender også forespørselsteksten som et JSON-objekt med «url»-egenskapen satt til https://tesla.com. Til slutt inkluderer vi forespørselsoverskrifter som spesifiserer innholdstype som JSON, samt API-nøkkelen i «x-api-key»-overskriften.
Ved kjøring av kommandoen får man følgende resultat:
{"timestamp":1669328564856,"apiStatus":"success","apiCode":200,"meta":{"url":"https://tesla.com","device":"desktop","test":{"id":"1fh2c30i05vmvxb99pdh6t6hze2x72jv"}},"data":{"author":null,"date":null,"description":"Tesla is accelerating the world’s transition to sustainable energy with electric cars, solar and integrated renewable energy solutions for homes and businesses.","image":"https://tesla-cdn.thron.com/delivery/public/image/tesla/6139697c-9d6a-4579-837e-a9fc5df4a773/bvlatuR/std/1200x628/Model-3-Homepage-Social-LHD","logo":"https://tesla.com/themes/custom/tesla_frontend/assets/favicons/favicon-196x196.png","publisher":"Tesla","title":"Electric Cars, Solar & Clean Energy | Tesla","url":"https://www.tesla.com/","lang":"en"}}
Dette er det forventede resultatet.
I neste steg skal vi skrive et NodeJS-skript for å hente data fra API-et. Det betyr at man må ha NodeJS installert. Man trenger også NPM eller en annen pakkebehandler for å håndtere prosjektets avhengigheter. Vi bruker Bash-terminalen for å kjøre kommandoene.
For å bruke API-et i JavaScript, starter vi med å lage en prosjektmappe og åpne den i terminalen:
mkdir metascraping-js && cd metascraping-js
Deretter lages filen for skriptet:
touch index.js
Så initierer vi prosjektet som et Node-prosjekt:
npm init -y
For å bruke ESModule-syntaks i filen, legger man til linjen `»type» : «module»` til roten av package.json-filen:
{ "name": "metascraping", "version": "1.0.0", "description": "", "main": "index.js", "type": "module", "scripts": { "test": "echo "Error: no test specified" && exit 1" }, "keywords": [], "author": "", "license": "ISC", }
Etter det installeres node-fetch-pakken. Denne pakken gir en fetch-funksjon i NodeJS, lignende nettleserens fetch-funksjon. Dette gjør det enklere å lage HTTP-forespørsler i NodeJS enn å bruke den innebygde http-modulen:
npm install node-fetch
Etter installasjon, kan man begynne å redigere skriptet. Man åpner index.js-filen i en tekstredigerer. I dette eksempelet benyttes nano:
nano index.js
I index.js-filen starter man med å importere fetch-funksjonen:
import fetch from 'node-fetch'
Deretter defineres forespørselsteksten som et JSON-objekt med «url»-egenskapen:
const body = JSON.stringify({ url: 'https://spacex.com' });
Så defineres forespørselsalternativene som skal sendes til fetch-funksjonen:
const options = { method: 'POST', headers: { 'Content-Type': 'application/json', 'x-api-key': <YOUR API KEY here> }, body: body }
Her defineres forespørselsmetode som POST. To overskrifter legges også til, en for innholdstypen og en for API-nøkkelen. Husk å erstatte `
Til slutt kaller man fetch-funksjonen:
fetch('https://api.tipsbilk.net.com/metascraping', options) .then(response => response.json()) .then(json => console.log(json))
Her kalles fetch med API-endepunktet og de definerte alternativene. Siden fetch returnerer et promise, bruker vi `then` for å behandle svaret. Først parses JSON-svaret, og deretter skrives det ut i konsollen.
Til syvende og sist, ser filen slik ut:
import fetch from 'node-fetch' const body = JSON.stringify({ url: 'https://spacex.com' }); const options = { method: 'POST', headers: { 'Content-Type': 'application/json', 'x-api-key': <YOUR API KEY here> }, body: body } fetch('https://api.tipsbilk.net.com/metascraping', options) .then(response => response.json()) .then(json => console.log(json))
For å kjøre skriptet, lagrer man filen og lukker tekstredigereren, og skriver deretter inn:
node .
Da skal man få ut følgende metadata:
{ timestamp: 1669305079698, apiStatus: 'success', apiCode: 200, meta: { url: 'https://spacex.com', device: 'desktop', test: { id: '8m3srgqw06q2k8li5p6x70s8165d6e2f' } }, data: { author: null, date: null, description: 'SpaceX designs, manufactures and launches advanced rockets and spacecraft.', image: 'https://www.spacex.com/static/images/share.jpg', logo: 'https://spacex.com/static/images/favicon.ico', publisher: 'SpaceX', title: 'SpaceX', url: 'http://www.spacex.com/', lang: 'en' } }
Bruke tipsbilk.net API med PHP
For å bruke tipsbilk.net Metascraping API med PHP, må PHP og Composer være installert.
Først opprettes og åpnes prosjektmappen:
mkdir metascraping-php && cd metascraping-php
Deretter installeres GuzzleHTTP, som er en av flere HTTP-klienter man kan bruke med tipsbilk.net API:
composer require guzzlehttp/guzzle
Etter installasjon av Guzzle, opprettes et PHP-script:
touch script.php
Så kan man starte med å skrive koden. script.php åpnes med tekstredigerer, som nano i dette eksemplet:
nano script.php
Inni scriptet legger man inn standard PHP-boilerplate:
<?php // All code goes here ?>
For å laste inn utvidelsene, importeres `Request` og `Client` fra Guzzle. Denne koden legges mellom <?php og ?>:
require_once('vendor/autoload.php'); use GuzzleHttpClient; use GuzzleHttpPsr7Request;
Deretter opprettes en ny klient ved å instansiere `GuzzleHttpClient`:
$client = new GuzzleHttpClient();
Så defineres overskriftene for forespørselen. Vi legger til to overskrifter, en for innholdstype som JSON, og en for API-nøkkelen:
$headers = [ 'x-api-key' => <YOUR API KEY HERE>, 'Content-Type' => 'application/json' ];
Erstatt <DIN API-NØKKEL HER> med din faktiske API-nøkkel fra tipsbilk.net API-dashbordet.
Nå defineres selve forespørselsteksten. I dette tilfellet er det et JSON-objekt med en «url»-egenskap satt til https://twitter.com:
$body = json_encode([ "url" => "https://twitter.com" ]);
For å opprette en forespørsel, instansierer man forespørselsklassen fra Guzzle, og inkluderer forespørselsmetode, endepunkt, overskrifter og forespørselstekst:
$request = new Request('POST', 'https://api.tipsbilk.net.com/metascraping', $headers, $body);
Deretter brukes klienten til å sende forespørselen:
$response = $client->sendAsync($request)->wait();
Så hentes innholdet fra svaret og skrives ut:
echo $response->getBody();
Hvis koden er korrekt, skal script.php se slik ut:
<?php require_once('vendor/autoload.php'); use GuzzleHttpClient; use GuzzleHttpPsr7Request; $client = new GuzzleHttpClient(); $headers = [ 'x-api-key' => <YOUR API KEY>, 'Content-Type' => 'application/json' ]; $body = json_encode([ "url" => "https://twitter.com" ]); $request = new Request('POST', 'https://api.tipsbilk.net.com/metascraping', $headers, $body); $response = $client->sendAsync($request)->wait(); echo $response->getBody(); ?>
Lagre skriptet, lukk det, og kjør det med:
php script.php
Da skal du få følgende resultat:
{ "timestamp":1669322100912, "apiStatus":"success", "apiCode":200, "meta": { "url":"https://twitter.com", "device":"desktop", "test":{ "id":"wn1nj30r04bk0ijtpprwdqmtuirg9lze" } }, "data":{ "author":null, "date":null, "description":"The latest stories on Twitter - as told by Tweets.", "image":"https://abs.twimg.com/a/1602199131/img/moments/moments-card.jpg", "logo":"https://abs.twimg.com/responsive-web/client-web/icon-ios.b1fc7279.png", "publisher":"Twitter", "title":"Explore", "url":"https://twitter.com/explore", "lang":"en" } }
Avsluttende Ord
Denne guiden har gått gjennom forskjellige måter å bruke tipsbilk.net Metascraping API på.
Metascraping API-et gir også mulighet for flere parametere enn bare URL. En slik parameter er proxy-parameteren som bare er tilgjengelig med premium-abonnementet. Likevel er tipsbilk.net API et kraftig verktøy for mange bruksområder.
Sjekk den offisielle dokumentasjonen til tipsbilk.net API for mer informasjon.