Web scraping, neboli extrahování dat z webových stránek, se obvykle provádí z HTML kódu, který se generuje při načítání webové stránky.
Metascraping je specifický typ extrakce, při kterém se zaměřujeme na získávání metadat webové stránky z meta tagů, které jsou součástí HTML kódu.
Metadata webové stránky představují doplňující informace o dané stránce, ale ne o jejím obsahu samotném. Mezi metadata se mohou řadit například jméno autora, název stránky nebo její stručný popis.
Tato data napomáhají jak uživatelům, tak vyhledávačům pochopit, o čem daná stránka pojednává. Metascraping umožňuje rychlé získání těchto informací, což šetří čas při prohledávání webu.
Pro získání metadat z webových stránek existuje několik metod. Mezi ně patří ruční extrakce, použití specializovaných knihoven nebo využití API, jako je například etechblog.cz Metascraping API.
Různé cesty k dosažení cíle
Pokud zvolíte ruční metodu, můžete otevřít webovou stránku v prohlížeči Chrome a pomocí nástrojů pro vývojáře (DevTools) extrahovat metadata z panelu „Prvky“. Tento postup je však časově náročný a neefektivní, pokud pracujete s větším počtem stránek. Pro automatizaci tohoto úkolu můžete využít několik přístupů:
Prvním přístupem je vytvoření vlastního kódu. V tomto případě posíláte HTTP požadavek na server webové stránky a analyzujete HTML odpověď. Pomocí regulárních výrazů nebo porovnávání vzorů extrahujete data z meta tagů. Nicméně, tento přístup vyžaduje čas a energii, a navíc znovu vytváříte již existující řešení.
Druhý přístup spočívá v použití knihoven, které jsou dostupné v různých programovacích jazycích. Tyto knihovny vám usnadní práci tím, že abstrahují složitosti implementace a zjednoduší proces extrakce. Problém však může nastat, pokud váš preferovaný programovací jazyk nemá vhodnou knihovnu, nebo pokud daná knihovna není kompatibilní s vaším běhovým prostředím.
Třetí možností je použití API, například etechblog.cz Metascraping API. Toto řešení je ideální, protože poskytuje jednotné rozhraní bez ohledu na to, jaký programovací jazyk používáte. API je použitelné v jakémkoli jazyce, který podporuje HTTP požadavky.
V tomto článku se zaměříme na použití etechblog.cz Metascraping API s využitím cURL, PHP a JavaScriptu (NodeJS).
Vzhledem k nevýhodám ostatních metod má použití etechblog.cz API tyto výhody:
- Je nezávislé na programovacím jazyce a běhovém prostředí.
- Ušetříte čas tím, že nemusíte znovuobjevovat již existující řešení a psát zbytečný kód.
- Umožňuje efektivní získávání dat z velkého množství webových stránek během několika sekund.
- Jeho použití je velmi jednoduché.
- Můžete ho používat zdarma.
Jak začít s etechblog.cz API
Pro používání etechblog.cz API budete potřebovat API klíč. Získáte ho tak, že se zaregistrujete na webové stránce etechblog.cz a vytvoříte si bezplatný účet. Po přihlášení do administrace naleznete váš API klíč.
API endpoint se nachází na adrese https://api.etechblog.cz.com/metascraping. Při odesílání požadavku je nutné zadat API klíč jako hlavičku požadavku s názvem `x-api-key` a hodnotou vašeho klíče.
Dále musíte odeslat další parametry v těle požadavku. Mezi ně patří adresa URL, zařízení a proxy země.
- Adresa URL určuje webovou stránku, ze které chcete získat metadata.
- Zařízení udává, z jakého zařízení bude web načítán (mobilní nebo desktop).
- Proxy země udává zemi, ze které bude požadavek odeslán. Tato funkce je však dostupná pouze v placených plánech etechblog.cz.
Vzhledem k tomu, že parametry se odesílají v těle požadavku, musí se jednat o POST požadavek, protože GET požadavky nepodporují odesílání metadat.
V první ukázce si ukážeme, jak pomocí nástroje cURL z příkazové řádky odeslat požadavek na Metascraping API. Abyste mohli používat cURL, musíte si ho nejdříve nainstalovat.
Já budu používat terminál Bash, který je výchozí na systémech macOS a Linux. Pro Windows bude nutné nainstalovat Git Bash.
Po instalaci cURL můžete použít příkaz cURL k vytvoření požadavku. Příkazu zadáme parametry pro specifikaci požadavku: metodu, endpoint, tělo a hlavičky.
curl -X POST https://api.etechblog.cz.com/metascraping -d '{ "url": "https://tesla.com" }' -H 'Content-Type: application/json' -H 'x-api-key: <API_KEY>'
Poznámka: Zpětné lomítko na konci prvních tří řádků umožňuje rozdělit příkaz na více řádků pro lepší čitelnost.
Tento příkaz specifikuje metodu HTTP jako POST a endpoint jako meta-scraping API od etechblog.cz.
Tělo požadavku bylo odesláno jako JSON objekt s vlastností URL nastavenou na https://tesla.com. Dále byly přidány hlavičky, které definují typ obsahu jako JSON a obsahují API klíč v hlavičce `x-api-key`.
Po spuštění tohoto příkazu obdržíte následující výstup:
{"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"}}
To je správný výstup.
Pro tento projekt vytvoříme skript v NodeJS pro získávání dat z API. Pro tento účel budete potřebovat nainstalovaný NodeJS. Také je vhodné mít nainstalovaný správce balíčků (např. NPM). Já budu i nadále používat Bash pro spouštění příkazů.
Pro použití API v JavaScriptu vytvoříme prázdnou složku projektu a otevřeme ji v terminálu.
mkdir metascraping-js && cd metascraping-js
Následně vytvoříme soubor, ve kterém budeme psát skript:
touch index.js
Poté inicializujeme projekt jako Node projekt:
npm init -y
Pro použití ESModule syntaxe přidáme do `package.json` řádek `„type“ : „module“`, aby soubor vypadal takto:
{ "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", }
Dále nainstalujeme balíček node-fetch, který nám poskytuje funkci `fetch`, podobnou funkci `fetch` v prohlížeči. To zjednodušuje vytváření HTTP požadavků v NodeJS.
npm install node-fetch
Po úspěšné instalaci balíčku můžeme začít editovat skript. Otevřete soubor `index.js` v textovém editoru. Já budu používat terminálový editor `nano`.
nano index.js
Na začátek souboru přidáme import funkce `fetch`, která je výchozím exportem modulu `node-fetch`.
import fetch from 'node-fetch'
Nyní definujeme tělo našeho požadavku. To bude JSON string s vlastností `url`. Hodnota této vlastnosti je webová stránka, jejíž metadata chceme získat.
const body = JSON.stringify({ url: 'https://spacex.com' });
Dále definujeme možnosti požadavku, které předáme funkci `fetch` při jejím zavolání.
const options = { method: 'POST', headers: { 'Content-Type': 'application/json', 'x-api-key': <YOUR API KEY here> }, body: body }
Metodu požadavku definujeme jako POST. Také jsme definovali dvě hlavičky. První specifikuje, že tělo obsahuje JSON data, druhá obsahuje API klíč.
Nahraďte `
Nakonec zavoláme funkci `fetch`.
fetch('https://api.etechblog.cz.com/metascraping', options) .then(response => response.json()) .then(json => console.log(json))
Zde voláme funkci `fetch`, které předáváme endpoint API a možnosti, které jsme definovali. Protože `fetch` vrací promise, připojili jsme callback, který analyzuje JSON odpověď. Tento callback vrací další promise a když je vyřešen, výsledek vypíšeme do konzole.
Výsledný soubor by měl vypadat takto:
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.etechblog.cz.com/metascraping', options) .then(response => response.json()) .then(json => console.log(json))
Pro spuštění skriptu, uložte změny a zavřete textový editor. Následně zadejte v terminálu příkaz:
node .
Měli byste obdržet následující 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' } }
Použití etechblog.cz API s PHP
Pro použití etechblog.cz Metascraping API se ujistěte, že máte na lokálním počítači nainstalováno PHP a Composer.
Pro začátek vytvořte a otevřete složku projektu.
mkdir metascraping-php && cd metascraping-php
Následně nainstalujte GuzzleHTTP. Guzzle je jeden z PHP klientů, které můžete použít s etechblog.cz API.
composer require guzzlehttp/guzzle
Po instalaci Guzzle vytvořte skript pomocí:
touch script.php
Nyní můžete začít psát kód. Použijte libovolný textový editor k otevření souboru `script.php`. Já budu používat terminálový editor `nano`.
nano script.php
Do skriptu vložíme PHP blok:
<?php // All code goes here ?>
Nyní, abychom mohli používat Guzzle, importujeme třídy `Request` a `Client`. Tento kód vložte mezi `` tagy, které jste vytvořili před chvílí.
require_once('vendor/autoload.php'); use GuzzleHttpClient; use GuzzleHttpPsr7Request;
Dále vytvoříme klienta vytvořením instance třídy `GuzzleHttpClient`.
$client = new GuzzleHttpClient();
Následně definujeme hlavičky požadavku. Pro tento požadavek poskytneme dvě hlavičky. Jednu specifikující typ obsahu jako JSON a druhou s API klíčem.
$headers = [ 'x-api-key' => <YOUR API KEY HERE>, 'Content-Type' => 'application/json' ];
Nahraďte `
Nyní definujeme tělo požadavku. V našem případě bude tělem JSON string s adresou URL nastavenou na „https://twitter.com“.
$body = json_encode([ "url" => "https://twitter.com" ]);
Pro vytvoření požadavku vytvoříme instanci třídy `Request` a předáme jí metodu požadavku, endpoint, hlavičky a tělo požadavku.
$request = new Request('POST', 'https://api.etechblog.cz.com/metascraping', $headers, $body);
Následně použijeme klienta k odeslání požadavku.
$response = $client->sendAsync($request)->wait();
Poté můžeme extrahovat tělo odpovědi a vytisknout ho do konzole.
echo $response->getBody();
Pokud jste zkopírovali kód správně, soubor `script.php` by měl vypadat takto:
<?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.etechblog.cz.com/metascraping', $headers, $body); $response = $client->sendAsync($request)->wait(); echo $response->getBody(); ?>
Uložte skript, zavřete ho a spusťte příkazem:
php script.php
Měli byste obdržet následující výstup:
{ "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" } }
Závěrem
Tento článek demonstroval různé způsoby, jak použít etechblog.cz Metascraping API.
Metascraping API vám umožňuje zadávat další parametry kromě URL. Jedním z nich je parametr proxy, který je však dostupný pouze s prémiovým plánem. Nicméně, etechblog.cz API je dostatečně výkonné pro mnoho použití.
Pro více informací se podívejte na oficiální dokumentaci etechblog.cz API.