U osnovi, veb struganje (engl. web scraping) predstavlja proces izdvajanja podataka sa veb stranice, direktno iz HTML koda koji se generiše prilikom učitavanja te stranice.
Metastruganje (engl. metascraping), s druge strane, fokusira se na izdvajanje metapodataka veb stranice iz njenih meta tagova.
Metapodaci veb stranice su informacije o samoj stranici, ali ne uključuju njen sadržaj. Na primer, metapodaci mogu da obuhvate ime autora, naslov, i kratak opis veb stranice.
Ovi metapodaci su od pomoći korisnicima i pretraživačima jer im omogućavaju da razumeju o čemu se radi na stranici. Struganje metapodataka omogućava korisnicima da brzo prikupe informacije o veb stranicama, štedeći im vreme.
Postoji nekoliko načina za pristupanje veb stranicama i izdvajanje njihovih metapodataka. To uključuje ručno izdvajanje, korišćenje specijalizovanih biblioteka, ili korišćenje API-ja kao što je vdzvdz MetaScraping API.
Brojni pristupi za rešavanje problema
Za ručno izdvajanje metapodataka, možete koristiti alatke za razvojne programere u pregledaču, kao što je Chrome DevTools, i direktno kopirati podatke sa kartice „Elementi“. Međutim, ovaj proces može biti repetitivan i dosadan ako imate mnogo stranica za obradu. Srećom, postoje načini da se ovaj zadatak automatizuje.
Jedan pristup je pisanje koda od nule. U tom slučaju, šaljete HTTP zahtev veb stranici čije metapodatke želite da preuzmete. Zatim, analizirate HTML odgovor i izdvajate podatke iz meta tagova korišćenjem regularnih izraza ili šablona. Međutim, ovaj pristup podrazumeva „ponovno izmišljanje točka“, jer ćete trošiti vreme na pisanje koda koji već postoji.
Drugi pristup je korišćenje biblioteke u odabranom programskom jeziku. Ovo vam omogućava da apstrahujete složene detalje implementacije i olakšate proces. Ipak, ovaj pristup nije moguć ako vaš programski jezik nema odgovarajuću biblioteku ili ako okruženje za izvršavanje ne podržava potrebnu biblioteku.
Treći pristup je korišćenje API-ja kao što je vdzvdz MetaScraping API. Ovaj pristup je često idealan, jer vam pruža jedinstven interfejs bez obzira na programski jezik koji koristite. Može se koristiti u bilo kom jeziku koji podržava slanje HTTP zahteva.
U nastavku ovog članka, pokazaćemo vam kako da koristite vdzvdz MetaScraping API sa cURL-om, PHP-om i JavaScriptom (NodeJS).
U poređenju sa ostalim pristupima, korišćenje vdzvdz API-ja ima nekoliko prednosti:
- Nezavisan je od programskog jezika i okruženja za izvršavanje.
- Izbegavate ponovno pisanje već postojećeg koda, čime štedite vreme.
- Omogućava efikasno struganje velikog broja veb stranica (u samo nekoliko sekundi).
- Izuzetno je jednostavan za upotrebu.
- Može se koristiti besplatno.
Početak korišćenja vdzvdz API-ja
Da biste koristili vdzvdz API, biće vam potreban API ključ. Možete ga dobiti tako što ćete posetiti vdzvdz veb sajt i kreirati besplatan nalog. Nakon kreiranja naloga, prijavite se na kontrolnu tablu, gde ćete moći da pronađete svoj API ključ.
API krajnja tačka (endpoint) se nalazi na adresi: https://api.vdzvdz.com/metascraping
. Kada šaljete zahtev, vaš API ključ treba da uključite kao zaglavlje zahteva pod imenom x-api-key
, čija vrednost je vaš API ključ.
Takođe ćete morati da unesete dodatne parametre u telu zahteva. To su url
, device
, i proxyCountry
.
url
određuje adresu veb stranice sa koje želite da izvučete metapodatke.device
specificira uređaj koji se koristi prilikom posete sajtu. Možete birati između opcijamobile
ilidesktop
.proxyCountry
određuje državu sa koje treba uputiti zahtev. Imajte na umu da je proxy zemlja premium funkcija, dostupna samo u okviru plaćenih vdzvdz planova.
S obzirom da se parametri šalju u telu zahteva, neophodno je koristiti POST zahtev, jer GET zahtevi ne podržavaju slanje podataka u telu.
U prvoj demonstraciji, koristićemo cURL alatku iz komandne linije za upućivanje zahteva ka MetaScraping API-ju. Da biste koristili cURL, prvo je potrebno da ga instalirate.
Koristiću Bash terminal, koji je podrazumevani terminal na macOS-u i Linuxu. Za Windows, moraćete da instalirate Git Bash.
Nakon instalacije cURL-a, možemo koristiti curl
komandu za slanje zahteva. Komandi ćemo proslediti opcije kako bismo specificirali parametre zahteva: metod zahteva, krajnju tačku, telo zahteva i zaglavlja zahteva.
curl -X POST
https://api.techblog.co.rs.com/metascraping
-d '{ "url": "https://tesla.com" }'
-H 'Content-Type: application/json'
-H 'x-api-key: <API_KEY>'
Napomena: Obrnuta kosa crta nakon prva tri reda omogućava vam da prelomite komandu na više redova radi čitljivosti.
Ova komanda specificira HTTP metod kao POST i krajnju tačku kao vdzvdz API meta-struganje endpoint.
Takođe smo poslali telo zahteva kao JSON objekat sa svojstvom url
postavljenim na https://tesla.com
. Na kraju, dodali smo zaglavlja koja specificiraju tip sadržaja tela kao JSON i obezbedili API ključ koristeći zaglavlje x-api-key
.
Kada pokrenemo ovu komandu, dobićemo sledeći izlaz:
{"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"}}
Ovo je ispravan izlaz.
Za ovaj projekat, kreiraćemo NodeJS skriptu za preuzimanje podataka sa API-ja. Za ovo će vam biti potreban instaliran NodeJS. Takođe, potreban vam je NPM ili neki drugi menadžer paketa za upravljanje zavisnostima projekta. Koristiću Bash terminal za izvršavanje komandi.
Da bismo koristili API u JavaScriptu, prvo kreiramo prazan direktorijum projekta i otvorimo ga u terminalu.
mkdir metascraping-js && cd metascraping-js
Zatim možemo kreirati datoteku u kojoj ćemo pisati skriptu:
touch index.js
Nakon toga, možemo instancirati projekat kao Node projekat:
npm init -y
Da bismo koristili ESModule sintaksu unutar naše datoteke, dodajte red "type": "module"
u koren package.json
datoteke, tako da izgleda ovako:
{
"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"
}
Zatim ćemo instalirati paket node-fetch
. Ovaj paket obezbeđuje funkciju fetch
u NodeJS-u, koja je slična funkciji fetch
u pregledaču. Ovo olakšava slanje HTTP zahteva u NodeJS-u u poređenju sa korišćenjem ugrađenog http
modula.
npm install node-fetch
Kada je paket pravilno instaliran, možemo početi sa uređivanjem skripte. Otvorite datoteku index.js
koristeći tekst editor po vašem izboru. Ja ću koristiti nano
terminalski tekst editor.
nano index.js
U index.js
datoteci, prvo uvozimo funkciju fetch
, koja je podrazumevani izvoz modula za node-fetch
.
import fetch from 'node-fetch'
Zatim ćemo definisati telo našeg zahteva. Ovo će biti JSON string sa svojstvom url
. Vrednost svojstva url
je veb stranica čije metapodatke želimo da dobijemo.
const body = JSON.stringify({ url: 'https://spacex.com' });
Zatim možemo definisati opcije zahteva koje ćemo proslediti funkciji fetch
kada je pozovemo.
const options = {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'x-api-key': <YOUR API KEY here>
},
body: body
}
Naš metod zahteva je definisan kao POST zahtev. Takođe smo definisali dva zaglavlja. Jedno govori da telo sadrži JSON podatke, a drugo sadrži API ključ.
Možete zameniti <YOUR API KEY here>
sa vašim pravim API ključem. U praksi, API ključ ne bi trebalo da bude čvrsto kodiran u datoteku, već bi trebalo da se učitava pomoću promenljivih okruženja. Na kraju, naveli smo svojstvo body
kao vrednost konstante body
koju smo definisali ranije.
Na kraju, upućujemo poziv ka fetch
funkciji.
fetch('https://api.techblog.co.rs.com/metascraping', options)
.then(response => response.json())
.then(json => console.log(json))
Ovde smo pozvali funkciju fetch
, prosleđujući joj krajnju tačku API-ja i opcije koje smo definisali ranije. Pošto fetch
vraća obećanje, dodali smo povratni poziv koji analizira JSON odgovore koristeći then
.
Povratni poziv vraća drugo obećanje, i kada se ono razreši, mi ćemo console.log()
vratiti objekat.
Dakle, na kraju, naša datoteka bi trebalo da izgleda ovako:
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.techblog.co.rs.com/metascraping', options)
.then(response => response.json())
.then(json => console.log(json))
Da biste pokrenuli skriptu, sačuvajte izmene i zatvorite nano
ili drugi tekst editor, a zatim unesite sledeću komandu:
node .
Trebalo bi da dobijete sledeće metapodatke:
{
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'
}
}
Korišćenje vdzvdz API-ja sa PHP-om
Da biste koristili vdzvdz MetaScraping API, prvo proverite da li su PHP i Composer instalirani na vašem lokalnom računaru.
Za početak, kreirajte i otvorite direktorijum projekta.
mkdir metascraping-php && cd metascraping-php
Zatim, instalirajte GuzzleHTTP. Guzzle je jedan od mnogih PHP klijenata koji se mogu koristiti sa vdzvdz API-jem.
composer require guzzlehttp/guzzle
Kada se Guzzle instalira, možemo kreirati skriptu sa
touch script.php
Zatim, možemo početi sa pisanjem koda. Koristite tekst editor po svom izboru da otvorite datoteku script.php
. Ja ću koristiti nano
, terminalski tekst editor.
nano script.php
U skripti dodajemo standardni PHP kod:
<?php
// Sav kod ide ovde
?>
Sada, da bismo učitali ekstenzije, uvozimo klase Request
i Client
iz Guzzle-a. Ovaj kod treba da se nalazi između <?php
i ?>
koje smo dodali.
require_once('vendor/autoload.php');
use GuzzleHttpClient;
use GuzzleHttpPsr7Request;
Zatim, možemo kreirati klijenta tako što ćemo instancirati klasu GuzzleHttpClient
.
$client = new GuzzleHttpClient();
Nakon toga, možemo definisati zaglavlja za zahtev. Za ovaj konkretan zahtev, obezbedićemo dva zaglavlja, jedno koje govori da je tip sadržaja tela JSON, a drugo koje sadrži naš API ključ.
$headers = [
'x-api-key' => <YOUR API KEY HERE>,
'Content-Type' => 'application/json'
];
Zamenite <YOUR API KEY HERE>
sa vašim stvarnim API ključem sa vdzvdz API kontrolne table.
Zatim, možemo definisati telo zahteva. U našem slučaju, telo će biti JSON string sa svojstvom url
postavljenim na „https://twitter.com
„.
$body = json_encode([
"url" => "https://twitter.com"
]);
Da bismo kreirali zahtev, instanciramo klasu Request
koju smo ranije uvezli, prosleđujući metod zahteva, krajnju tačku, zaglavlja i telo zahteva.
$request = new Request('POST', 'https://api.techblog.co.rs.com/metascraping', $headers, $body);
Zatim, koristimo klijenta da pošaljemo zahtev.
$response = $client->sendAsync($request)->wait();
Nakon toga, možemo izdvojiti telo zahteva i odštampati ga u konzoli.
echo $response->getBody();
Ako ste ispravno iskopirali kod, datoteka script.php
bi trebalo da izgleda ovako:
<?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.techblog.co.rs.com/metascraping', $headers, $body);
$response = $client->sendAsync($request)->wait();
echo $response->getBody();
?>
Sačuvajte skriptu, zatvorite je i pokrenite koristeći:
php script.php
Trebalo bi da dobijete sledeći izlaz:
{
"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"
}
}
Završne reči
Ovaj vodič je obradio različite načine korišćenja vdzvdz MetaScraping API-ja.
MetaScraping API vam takođe omogućava da specificirate više parametara od samo url
. Jedan od takvih parametara je proxy
parametar, koji je dostupan samo u okviru vdzvdz API premium plana. Bez obzira na to, vdzvdz API ostaje dovoljno moćan za mnoge različite primene.
Pogledajte zvaničnu dokumentaciju vdzvdz API-ja za više informacija.