Jak wyodrębnić metadane witryny za pomocą API newsblog.pl Meta Scraping

Ogólnie rzecz biorąc, web scraping polega na wydobywaniu danych ze strony internetowej z kodu HTML generowanego podczas ładowania strony internetowej.

Metascraping to wyodrębnianie metadanych strony internetowej z metatagów strony internetowej.

Metadane strony internetowej to informacje o stronie, ale nie o jej zawartości. Na przykład metadane mogą obejmować nazwisko autora, tytuł i opis strony internetowej.

Pomaga użytkownikom i wyszukiwarkom zrozumieć, o czym jest strona. Skrobanie metadanych pozwala użytkownikowi szybko zebrać informacje o stronach internetowych w krótszym czasie.

Do usuwania metadanych ze stron internetowych można zastosować kilka metod, w tym usuwanie ręczne, korzystanie z biblioteki lub korzystanie z interfejsu API, takiego jak newsblog.pl Metascraping API.

Wiele sposobów na zabicie kota

Aby złomować ręcznie, można otworzyć stronę internetową za pomocą Chrome DevTools i wyodrębnić metadane z karty Elementy. Jednak ta instrukcja, powtarzalna i nużąca, gdy masz do czynienia z wieloma stronami. Możemy zautomatyzować zadanie na wiele sposobów:

Pierwszym podejściem jest napisanie kodu od podstaw. W tym podejściu wysyłasz żądanie HTTP do strony internetowej, której metadane chcesz wyodrębnić. Następnie możesz przeanalizować odpowiedź HTML, wyodrębniając dane z metatagów za pomocą wyrażeń regularnych lub dopasowywania wzorców. Jednak takie podejście polega na wymyślaniu koła na nowo, ponieważ będziesz spędzać czas na przepisywaniu istniejącego kodu.

Drugie podejście polega na użyciu biblioteki w dowolnym preferowanym języku programowania. Pozwala to na abstrakcję nad szczegółami implementacji i upraszcza sprawę. Jeśli jednak wybrany język programowania nie ma odpowiedniej biblioteki lub używane środowisko wykonawcze nie obsługuje tej biblioteki, nie można z niego korzystać.

Trzecie podejście polega na użyciu interfejsu API, takiego jak newsblog.pl Metascraping API. Takie podejście jest idealne, ponieważ zapewnia jednolity interfejs niezależnie od używanego języka programowania. Można go używać w dowolnym języku, o ile obsługuje wysyłanie żądań HTTP.

W tym artykule zademonstrujemy, jak używać API metascraping newsblog.pl z cURL, PHP i JavaScript (NodeJS).

Ze względu na wady innych podejść, zaletami korzystania z API newsblog.pl są:

  • Jest niezależny od języka i środowiska wykonawczego.
  • Unikasz wymyślania koła na nowo i spędzasz mniej czasu na pisaniu kodu.
  • Możesz skutecznie zeskrobać wiele stron internetowych (w ciągu kilku sekund).
  • Jest niesamowicie łatwy w użyciu.
  • Możesz go używać za darmo.

Rozpoczęcie pracy z interfejsem API newsblog.pl

Aby korzystać z interfejsu API newsblog.pl, potrzebny jest klucz API. Aby go otrzymać, wejdź na stronę newsblog.pl i załóż darmowe konto. Po utworzeniu konta zaloguj się do panelu. Z pulpitu nawigacyjnego powinieneś być w stanie zobaczyć swój klucz API.

Punkt końcowy interfejsu API znajduje się pod adresem https://api.newsblog.pl.com/metascraping. Kiedy wysyłasz żądanie, powinieneś podać swój klucz API jako nagłówek żądania o nazwie x-api-key i wartości będącej twoim kluczem API.

Będziesz także musiał przekazać dodatkowe parametry w treści żądania. Są to adres URL, urządzenie i kraj proxy.

  • Adres URL określa adres URL strony internetowej, której metadane chcesz zeskrobać.
  • Urządzenie określa urządzenie używane do odwiedzania witryny podczas pobierania metadanych. Masz do wyboru urządzenia mobilne lub stacjonarne.
  • Kraj pośredniczący określa kraj, z którego należy złożyć żądanie, zanim dane zostaną zeskrobane. Kraj proxy jest jednak funkcją premium i można z niej korzystać tylko w ramach płatnych planów newsblog.pl.

Biorąc pod uwagę, że parametry zostaną przekazane jako część treści, żądanie musi być żądaniem POST, ponieważ żądania GET nie mogą zawierać metadanych.

W pierwszej demonstracji użyjemy narzędzia cURL z wiersza poleceń, aby zażądać API Metascraping. Aby korzystać z cURL, musisz go najpierw zainstalować.

Zamierzam używać terminala Bash. To powinien być domyślny terminal w systemach macOS i Linux. W systemie Windows będziesz musiał zainstalować Git Bash.

Po zainstalowaniu cURL możemy użyć polecenia cURL, aby wysłać żądanie. Przekażemy opcje do polecenia, aby określić parametry żądania: metodę żądania, punkt końcowy, treść żądania i nagłówki żądania.

curl -X POST 
https://api.newsblog.pl.com/metascraping  
-d '{ "url": "https://tesla.com" }' 
-H 'Content-Type: application/json' 
-H 'x-api-key: <API_KEY>'

NB: Ukośnik odwrotny po pierwszych trzech wierszach pozwala podzielić dane wejściowe polecenia na wiele wierszy.

To polecenie określiło metodę HTTP jako POST, a punkt końcowy jako punkt końcowy meta-scraping API newsblog.pl.

Wysłaliśmy również treść żądania jako obiekt JSON z właściwością adresu URL określoną jako https://tesla.com. Na koniec dodaliśmy nagłówki określające typ zawartości treści jako JSON i udostępniliśmy klucz API za pomocą nagłówka x-api-key.

Kiedy uruchomimy to polecenie, otrzymamy następujące dane wyjściowe:

{"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 jest prawidłowe wyjście.

W tym projekcie stworzymy skrypt NodeJS do pobierania danych z API. Oznacza to, że będziesz potrzebować zainstalowanego NodeJS. Będziesz także potrzebował NPM lub dowolnego innego menedżera pakietów, aby Node mógł zarządzać zależnościami projektu. Zamierzam również używać terminala Bash do uruchamiania poleceń.

Aby użyć API w JavaScript, najpierw tworzymy pusty folder projektu i otwieramy go w terminalu.

mkdir metascraping-js && cd metascraping-js

Następnie możemy utworzyć plik, w którym będziemy pisać skrypt:

touch index.js

Następnie możemy utworzyć instancję projektu jako projekt Node:

npm init -y

Aby użyć składni ESModule w naszym pliku, dodaj wiersz „typ” : „moduł” do katalogu głównego pliku package.json, tak aby wyglądał tak:

{
  "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",
}

Następnie zainstalujemy pakiet node-fetch. Ten pakiet udostępnia funkcję pobierania w NodeJS, która jest podobna do funkcji pobierania przeglądarki. Ułatwia to wysyłanie żądań HTTP w NodeJS niż używanie wbudowanego modułu http do wysyłania żądań.

npm install node-fetch

Gdy pakiet zostanie poprawnie zainstalowany, możemy przystąpić do edycji skryptu. Otwórz plik index.js za pomocą wybranego edytora tekstu. W moim przypadku będę korzystał z edytora tekstu nano opartego na terminalu.

nano index.js

Edycję pliku index.js rozpoczynamy od zaimportowania funkcji fetch, która jest domyślnym eksportem modułu node-fetch.

import fetch from 'node-fetch'

Następnie zdefiniujemy treść naszego żądania. To będzie ciąg JSON z właściwością url. Wartością właściwości url jest strona internetowa, której metadane chcemy uzyskać.

const body = JSON.stringify({ url: 'https://spacex.com' });

Następnie możemy zdefiniować opcje żądania, które przekażemy do funkcji fetch, kiedy ją ostatecznie wywołamy.

const options = {
    method: 'POST',
    headers: {
        'Content-Type': 'application/json',
        'x-api-key': <YOUR API KEY here>
    },
    body: body
}

Zdefiniowaliśmy naszą metodę żądania jako żądanie POST. Zdefiniowaliśmy również dwa nagłówki. Jeden określa, że ​​treść zawiera dane JSON, a drugi udostępnia klucz API.

Możesz zastąpić swoim rzeczywistym kluczem API. W praktyce klucz API nie powinien być zakodowany na stałe w pliku, ale powinien być ładowany przy użyciu zmiennych środowiskowych. Na koniec określiliśmy właściwość body jako wartość stałej body, którą zdefiniowaliśmy wcześniej.

Na koniec wykonujemy wywołanie fetch

fetch('https://api.newsblog.pl.com/metascraping', options)
    .then(response => response.json())
    .then(json => console.log(json))

Tutaj wywołaliśmy funkcję fetch, przekazując punkt końcowy API i opcje, które zdefiniowaliśmy wcześniej. Ponieważ funkcja fetch zwraca obietnicę, dołączyliśmy wywołanie zwrotne, które analizuje odpowiedzi JSON przy użyciu funkcji then.

Wywołanie zwrotne zwraca kolejną obietnicę, a kiedy zostanie rozwiązane, przejdziemy do Console.log() zwróconego obiektu.

Więc ostatecznie nasz plik powinien wyglądać tak.

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.newsblog.pl.com/metascraping', options)
    .then(response => response.json())
    .then(json => console.log(json))

Aby uruchomić skrypt, zapisz zmiany i zamknij nano lub edytor tekstu, którego używasz, a następnie wprowadź następujące polecenie:

node .

Powinieneś otrzymać następujące metadane:

{
  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'
  }
}

Używanie API newsblog.pl z PHP

Aby korzystać z interfejsu API Metascraping newsblog.pl, najpierw upewnij się, że na komputerze lokalnym są zainstalowane PHP i Composer.

Aby rozpocząć, utwórz i otwórz folder projektu.

mkdir metascraping-php && cd metascraping-php

Następnie zainstaluj GuzzleHTTP. Guzzle jest jednym z wielu klientów PHP, których można używać z interfejsem API newsblog.pl.

composer require guzzlehttp/guzzle

Po zainstalowaniu Guzzle możemy utworzyć skrypt za pomocą

touch script.php

Następnie możemy przystąpić do pisania kodu. Korzystając z wybranego edytora tekstu, otwórz plik script.php. W moim przypadku użyję nano, który jest edytorem tekstu opartym na terminalu.

nano script.php

Wewnątrz skryptu wstawiamy szablon PHP

<?php
    // All code goes here
?>

Teraz, aby załadować rozszerzenia, zaimportuj klasy Request i Client z Guzzle. Ten kod powinien być zapisany pomiędzy , które napisaliśmy wcześniej.

require_once('vendor/autoload.php');

use GuzzleHttpClient;
use GuzzleHttpPsr7Request;

Następnie możemy utworzyć klienta, tworząc instancję klasy GuzzleHttpClient

$client = new GuzzleHttpClient();

Następnie możemy zdefiniować nagłówki dla żądania. W przypadku tego konkretnego żądania udostępnimy dwa nagłówki, jeden określający typ treści treści to JSON, a drugi zawierający nasz klucz API.

$headers = [
    'x-api-key' => <YOUR API KEY HERE>,
    'Content-Type' => 'application/json'
];

Zastąp rzeczywistym kluczem API z pulpitu API newsblog.pl.

Następnie możemy zdefiniować ciało. W naszym przypadku treść będzie ciągiem JSON z adresem URL właściwości ustawionym na „https://twitter.com”

$body = json_encode([
    "url" => "https://twitter.com"
]);

Aby utworzyć żądanie, tworzymy instancję klasy żądania, którą zaimportowaliśmy wcześniej, przekazując metodę żądania, punkt końcowy, nagłówki i treść żądania.

$request = new Request('POST', 'https://api.newsblog.pl.com/metascraping', $headers, $body);

Następnie używamy klienta do wysłania żądania.

$response = $client->sendAsync($request)->wait();

Następnie możemy wyodrębnić treść żądania i wydrukować ją w konsoli

echo $response->getBody();

Jeśli poprawnie skopiowałeś kod, plik script.php powinien wyglądać tak

<?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.newsblog.pl.com/metascraping', $headers, $body);

	$response = $client->sendAsync($request)->wait();

	echo $response->getBody();
?>

Zapisz skrypt, zamknij go i uruchom za pomocą

php script.php

Powinieneś otrzymać następujące dane wyjściowe:

{
    "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"
     }
}

Ostatnie słowa

W tym przewodniku przedstawiono różne sposoby korzystania z interfejsu API Metascraping newsblog.pl.

Metascraping API pozwala również na podanie większej liczby parametrów niż tylko adres URL. Jednym z takich parametrów jest parametr proxy, do którego dostęp można uzyskać tylko z planem premium API newsblog.pl. Niezależnie od tego, interfejs API newsblog.pl pozostaje wystarczająco potężny do wielu zastosowań.

Sprawdź oficjalną dokumentację interfejsu API newsblog.pl, aby uzyskać więcej informacji.