Webbskrapning innebär i grunden att man extraherar data från en webbplats genom att analysera den HTML-kod som genereras när en sida laddas.
Metaskrapning, å andra sidan, handlar om att hämta en webbsidas metadata från de metataggar som finns i sidans HTML-kod.
Med metadata avses information om en webbsida, men inte själva sidans innehåll. Den kan inkludera detaljer som författarens namn, sidans titel och en sammanfattande beskrivning.
Detta hjälper både användare och sökmotorer att förstå vad sidan handlar om. Genom att snabbt samla in metadata kan man effektivt få en överblick över webbsidor.
Det finns flera metoder för att extrahera metadata. Man kan göra det manuellt, använda specialiserade bibliotek eller anlita ett API som adminvista.com Metascraping API.
Flera vägar till samma mål
För manuell metadatautvinning kan man använda Chrome DevTools och hämta information från fliken ”Element”. Detta kan dock bli tröttsamt och ineffektivt när man ska bearbeta många sidor. Lyckligtvis finns det sätt att automatisera processen:
Ett sätt är att skriva all kod från grunden. Det innebär att man skickar en HTTP-förfrågan till den aktuella webbplatsen och sedan analyserar det HTML-svar man får. Man kan använda reguljära uttryck eller mönstermatchning för att hämta informationen från metataggarna. Nackdelen är att man riskerar att ”uppfinna hjulet på nytt” och lägger onödig tid på att återskapa redan befintlig funktionalitet.
Ett annat alternativ är att använda ett bibliotek i valfritt programmeringsspråk. Det ger en abstraktionsnivå som underlättar hanteringen. Men om biblioteket inte stöder det språk eller den körtidsmiljö man använder, kan det bli svårt.
Ett tredje sätt är att använda ett API som adminvista.com Metascraping API. Det ger ett konsekvent gränssnitt oberoende av programmeringsspråk och är användbart i alla miljöer som stöder HTTP-förfrågningar.
I den här artikeln visas hur man använder adminvista.com Metascraping API med cURL, PHP och JavaScript (NodeJS).
Med tanke på nackdelarna med de andra metoderna, framstår fördelarna med att använda adminvista.com API som uppenbara:
- Det är oberoende av programmeringsspråk och körtidsmiljö.
- Man behöver inte ”uppfinna hjulet på nytt” och sparar utvecklingstid.
- Man kan effektivt skrapa metadata från flera webbplatser (på bara några sekunder).
- Det är mycket enkelt att använda.
- Det finns en gratisversion.
Kom igång med adminvista.com API
För att använda adminvista.com API krävs en API-nyckel. Den får du genom att skapa ett kostnadsfritt konto på adminvista.com. När du är inloggad hittar du din API-nyckel i instrumentpanelen.
API-slutpunkten är https://api.adminvista.com/metascraping. I varje förfrågan ska din API-nyckel anges i anropets huvud, med namnet x-api-key och värdet som din API-nyckel.
Du behöver också ange ytterligare parametrar i anropet, nämligen webbadressen, enheten och proxylandet.
- URL: Webbadressen till den sida vars metadata du vill skrapa.
- Enhet: Den enhet som ska simuleras när datan hämtas (antingen ”mobil” eller ”desktop”).
- Proxyland: Det land som anropet ska göras ifrån. Detta är en premiumfunktion som endast är tillgänglig med betalplanerna hos adminvista.com.
Eftersom parametrarna ska skickas i anropets kropp, måste det vara en POST-förfrågan (GET-förfrågningar kan inte ha med en kropp).
Först kommer vi att använda cURL från kommandoraden för att interagera med Metascraping API. Om du inte har cURL installerat, måste du göra det först.
Jag använder en Bash-terminal. Den är standard i macOS och Linux. För Windows behöver man installera Git Bash.
När cURL är installerat, kan man skicka förfrågan med kommandot cURL. Vi skickar alternativ till kommandot för att definiera parametrar som metod, slutpunkt, kropp och huvud.
curl -X POST
https://api.adminvista.com/metascraping
-d '{ "url": "https://tesla.com" }'
-H 'Content-Type: application/json'
-H 'x-api-key: <API_KEY>'
OBS: Backslash i slutet av de tre första raderna gör att kommandot kan delas upp på flera rader.
Detta kommando definierar HTTP-metoden som POST och slutpunkten som adminvista.com API:s meta-skrapningsslutpunkt.
Vi skickar en JSON-sträng i anropets kropp med en URL-egenskap som är satt till https://tesla.com. Slutligen lägger vi till huvudena för att ange innehållstypen som JSON och API-nyckeln med x-api-key-huvudet.
Resultatet av kommandot blir:
{"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"}}
Det är det korrekta resultatet.
Nu ska vi skapa ett NodeJS-skript för att interagera med API:et. Det förutsätter att du har NodeJS installerat, samt NPM eller någon annan pakethanterare. Jag kommer att använda Bash-terminalen för att köra kommandon.
Först skapar vi en tom projektmapp och öppnar den i terminalen.
mkdir metascraping-js && cd metascraping-js
Sedan skapar vi filen där vi ska skriva vårt skript:
touch index.js
Därefter initialiserar vi projektet som ett nodprojekt:
npm init -y
För att använda ESModule-syntax lägger vi till raden `”type” : ”module”` i filen `package.json` så att den ser ut så här:
{
"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"
}
Nu installerar vi `node-fetch`-paketet, vilket ger en fetch-funktion i NodeJS som liknar webbläsarens fetch. Det förenklar HTTP-förfrågningar jämfört med den inbyggda HTTP-modulen.
npm install node-fetch
När paketet är installerat kan vi börja redigera skriptet. Öppna `index.js` i valfri textredigerare, jag använder nano här.
nano index.js
Börja med att importera `fetch`-funktionen:
import fetch from 'node-fetch'
Definiera sedan innehållet i förfrågan som en JSON-sträng med egenskapen ”url”, där värdet är den sida vi ska hämta metadata från.
const body = JSON.stringify({ url: 'https://spacex.com' });
Definiera därefter förfrågningsalternativen som ska skickas till fetch-funktionen:
const options = {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'x-api-key': <YOUR API KEY here>
},
body: body
}
Vi definierar HTTP-metoden som POST. Vi lägger till två huvuden: ett för att ange att kroppen innehåller JSON och det andra för API-nyckeln.
Ersätt <DIN API-NYCKEL> med din faktiska API-nyckel. I praktiken bör API-nyckeln inte vara hårdkodad, utan läsas in från miljövariabler. Slutligen definierar vi `body` som det JSON-objekt vi definierade tidigare.
Nu kan vi anropa fetch:
fetch('https://api.adminvista.com/metascraping', options)
.then(response => response.json())
.then(json => console.log(json))
Vi anropar fetch-funktionen med API-slutpunkten och de angivna alternativen. Eftersom `fetch` returnerar ett löfte, lägger vi till en callback med `then` som analyserar svaret i JSON-format.
Callback:en returnerar ett nytt löfte som i sin tur resulterar i `console.log()` av det returnerade objektet.
Vår fil ska nu se ut så här:
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.adminvista.com/metascraping', options)
.then(response => response.json())
.then(json => console.log(json))
För att köra skriptet, spara ändringarna, stäng redigeraren och kör kommandot:
node .
Du ska nu få följande 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'
}
}
Använda adminvista.com API med PHP
För att använda adminvista.com Metascraping API med PHP måste du ha PHP och Composer installerat.
Börja med att skapa och öppna en projektmapp:
mkdir metascraping-php && cd metascraping-php
Installera sedan GuzzleHTTP. Guzzle är en av flera PHP-klienter du kan använda för adminvista.com API.
composer require guzzlehttp/guzzle
Skapa ett skript när Guzzle är installerat:
touch script.php
Använd valfri textredigerare och öppna `script.php`. Jag använder nano.
nano script.php
Lägg till en PHP-mall i skriptet:
<?php
// All code goes here
?>
För att ladda tilläggen, importera klasserna `Request` och `Client` från Guzzle. Koden ska vara mellan `<?php` och `?>`.
require_once('vendor/autoload.php');
use GuzzleHttpClient;
use GuzzleHttpPsr7Request;
Skapa en klient genom att instansiera klassen `GuzzleHttpClient`:
$client = new GuzzleHttpClient();
Definiera sedan huvuden för begäran. Här behöver vi två: en för att ange JSON-innehållstypen, och en annan för API-nyckeln.
$headers = [
'x-api-key' => <YOUR API KEY HERE>,
'Content-Type' => 'application/json'
];
Ersätt `<DIN API-NYCKEL HÄR>` med din faktiska nyckel.
Definiera nu anropets kropp. Det är en JSON-sträng med egenskapen url, inställd på https://twitter.com:
$body = json_encode([
"url" => "https://twitter.com"
]);
För att skapa förfrågan instansierar vi `Request`-klassen och skickar in metod, slutpunkt, huvuden och kropp.
$request = new Request('POST', 'https://api.adminvista.com/metascraping', $headers, $body);
Skicka sedan förfrågan med klienten:
$response = $client->sendAsync($request)->wait();
Slutligen hämtar vi svaret och skriver ut det:
echo $response->getBody();
Filen script.php ska se ut så här:
<?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.adminvista.com/metascraping', $headers, $body);
$response = $client->sendAsync($request)->wait();
echo $response->getBody();
?>
Spara skriptet, stäng redigeraren och kör med:
php script.php
Du borde se följande 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"
}
}
Avslutande ord
Denna guide har visat hur man använder adminvista.com Metascraping API på olika sätt.
Metascraping API tillåter fler parametrar än bara URL:en, till exempel proxyparametern (som endast är tillgänglig i premiumplanen). Trots det är adminvista.com API kraftfullt nog för de flesta användningsområden.
Läs den officiella dokumentationen för adminvista.com API för mer information.