如何使用 Geekflare Meta Scraping API 提取網站元數據

已發表: 2022-11-30

一般來說,網絡抓取是從加載網頁時生成的 HTML 中提取網站數據。

Metascraping 是從網頁的元標記中提取網頁的元數據。

網頁的元數據是有關頁面的信息,而不是頁面的內容。 例如,元數據可能包括作者姓名、標題和網頁描述。

它幫助用戶和搜索引擎了解頁面的內容。 抓取元數據允許用戶在更短的時間內快速收集有關網頁的信息。

可以使用多種方法來抓取網頁的元數據,包括手動抓取、使用庫或使用 Geekflare Metascraping API 等 API。

殺死貓的多種方法

要手動廢棄,可以使用 Chrome DevTools 打開網頁並從“元素”選項卡中提取元數據。 但是,當您處理多個頁面時,此手冊重複且乏味。 我們可以使用多種方法自動執行任務:

一種方法是從頭開始編寫代碼。 在這種方法中,您向要提取其元數據的網站發出 HTTP 請求。 之後,您可以解析響應 HTML,使用正則表達式或模式匹配從元標記中提取數據。 但是,這種方法是在重新發明輪子,因為您將花費時間重寫現有代碼。

第二種方法是使用您喜歡的任何編程語言的庫。 這允許您抽象實現細節並使事情變得簡單。 但是,如果您選擇的編程語言沒有合適的庫或者您使用的特定運行時不支持該庫,那麼您將無法使用它。

第三種方法是使用像 Geekflare Metascraping API 這樣的 API。 這種方法是理想的,因為無論您使用何種編程語言,它都能為您提供統一的界面。 只要支持發出 HTTP 請求,它就可以用任何語言使用。

本文將演示如何將 Geekflare Metascraping API 與 cURL、PHP 和 JavaScript (NodeJS) 結合使用。

為什麼要使用 Geekflare Metascraping API?

由於其他方法的缺點,使用 Geekflare API 的優點是:

  • 它與語言和運行時環境無關。
  • 您可以避免重新發明輪子並花更少的時間編寫代碼。
  • 您可以有效地抓取多個網站(幾秒鐘內)。
  • 它非常易於使用。
  • 您可以免費使用它。

開始使用 Geekflare API

要使用 Geekflare API,您需要一個 API 密鑰。 要獲得一個,請訪問 Geekflare 網站並創建一個免費帳戶。 創建帳戶後,登錄儀表板。 從儀表板中,您應該能夠看到您的 API 密鑰。

Geekflare-Dashboard-1

Geekflare Metascraping API 概述

API 端點位於https://api.geekflare.com/metascraping 。 發出請求時,您應該將 API 密鑰作為請求標頭提供,名稱為x-api-key ,值是您的 API 密鑰。

您還需要在請求正文中傳遞其他參數。 它們是urldeviceproxyCountry

  • URL指定要抓取其元數據的網頁的 URL。
  • 設備指定在抓取元數據時用於訪問站點的設備。 您的設備選項是移動設備或桌面設備。
  • 代理國家/地區指定在抓取數據之前應從中提出請求的國家/地區。 然而,代理國家是一項高級功能,只能在 Geekflare 付費計劃下使用。

鑑於參數將作為正文的一部分傳遞,請求必須是POST請求,因為GET請求不能包含元數據。

在 cURL 中使用 Geekflare Metascraping API

在第一個演示中,我們將從命令行使用 cURL 實用程序來請求 Metascraping API。 要使用 cURL,您需要先安裝它。

我將使用 Bash 終端。 這應該是 macOS 和 Linux 上的默認終端。 對於 Windows,您必須安裝 Git Bash。

cURL安裝完成後,我們就可以使用cURL命令來發起請求了。 我們將向命令傳遞選項以指定請求參數:請求方法、端點、請求正文和請求標頭。

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

注意:前三行後的反斜杠允許您將命令輸入分成多行。

此命令將 HTTP 方法指定為 POST,並將端點指定為 Geekflare API 元數據抓取端點。

我們還將請求正文作為 JSON 對象發送,其 URL 屬性指定為 https://tesla.com。 最後,我們添加了將正文內容類型指定為 JSON 的標頭,並使用x-api-key標頭提供了 API 密鑰。

當我們運行這個命令時,我們得到以下輸出:

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

那是正確的輸出。

將 Geekflare Metascraping API 與 JavaScript 結合使用

對於這個項目,我們將創建一個 NodeJS 腳本來從 API 中獲取數據。 這意味著您需要安裝 NodeJS。 您還需要 NPM 或任何其他 Node 包管理器來管理項目的依賴項。 我還將使用 Bash 終端來運行命令。

要在 JavaScript 中使用 API,我們首先創建一個空的項目文件夾並在終端中打開它。

 mkdir metascraping-js && cd metascraping-js

在此之後,我們可以創建我們要編寫腳本的文件:

 touch index.js

然後我們可以將項目實例化為 Node 項目:

 npm init -y

要在我們的文件中使用 ESModule 語法,請將行“ type:module ”添加到 package.json 文件的根目錄,如下所示:

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

接下來,我們將安裝node-fetch包。 這個包在NodeJS中提供了一個類似於瀏覽器的fetch功能的fetch功能。 這使得在 NodeJS 中發出 HTTP 請求比使用內置的http模塊發出請求更容易。

 npm install node-fetch

正確安裝包後,我們就可以開始編輯腳本了。 使用您選擇的文本編輯器打開index.js文件。 就我而言,我將使用基於終端的nano文本編輯器。

 nano index.js

編輯index.js文件,我們首先導入fetch函數,這是node-fetch模塊的默認導出。

 import fetch from 'node-fetch'

然後,我們將定義請求的主體。 這將是一個帶有url屬性的 JSON 字符串。 url屬性的值是我們想要獲取其元數據的網頁。

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

接下來,我們可以定義最終調用fetch函數時將傳遞給它的請求選項。

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

我們已將我們的請求方法定義為POST請求。 我們還定義了兩個標題。 一個指定正文包含 JSON 數據,另一個提供 API 密鑰。

您可以將 <YOUR API KEY> 替換為您的實際 API 密鑰。 實際上,API 密鑰不應硬編碼到文件中,而應使用環境變量加載。 最後,我們將 body 屬性指定為我們之前定義的 body 常量的值。

最後,我們調用fetch

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

在這裡,我們調用了 fetch 函數,傳入了 API 端點和我們之前定義的選項。 由於fetch返回一個承諾,我們附加了一個使用then解析 JSON 響應的回調。

回調返回另一個承諾,當它解決時,我們將console.log()返回的對象。

所以最終,我們的文件應該是這樣的。

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

要運行腳本、保存編輯並關閉 nano 或您正在使用的文本編輯器,然後輸入以下命令:

 node .

您應該獲得以下元數據:

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

將 Geekflare API 與 PHP 結合使用

要使用 Geekflare Metascraping API,首先確保您的本地計算機上安裝了 PHP 和 Composer。

首先,創建並打開項目文件夾。

 mkdir metascraping-php && cd metascraping-php

接下來,安裝 GuzzleHTTP。 Guzzle 是您可以與 Geekflare API 一起使用的眾多 PHP 客戶端之一。

 composer require guzzlehttp/guzzle

安裝 Guzzle 後,我們可以創建一個腳本

touch script.php

然後我們就可以開始寫代碼了。 使用您選擇的文本編輯器,打開script.php文件。 就我而言,我將使用nano ,它是一個基於終端的文本編輯器。

 nano script.php

在腳本中,我們插入樣板 PHP

 <?php // All code goes here ?>

現在加載擴展,從 Guzzle 導入 Request 和 Client 類。 這段代碼應該寫在我們之前寫的<?php?>之間。

 require_once('vendor/autoload.php'); use GuzzleHttp\Client; use GuzzleHttp\Psr7\Request;

接下來,我們可以通過實例化GuzzleHttp\Client類來創建客戶端

$client = new GuzzleHttp\Client();

之後,我們可以為請求定義標頭。 對於這個特定的請求,我們將提供兩個標頭,一個指定正文的內容類型為 JSON,另一個包含我們的 API 密鑰。

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

<YOUR API KEY HERE>替換為來自 Geekflare API 儀表板的實際 API 密鑰。

然後,我們可以定義主體。 在我們的例子中,正文將是一個 JSON 字符串,屬性url設置為"https://twitter.com"

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

要創建請求,我們實例化之前導入的請求類,傳入請求方法、端點、標頭和請求正文。

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

接下來,我們使用客戶端發送請求。

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

之後,我們可以提取請求的主體並將其打印到控制台

echo $response->getBody();

如果您已正確複製代碼,則script.php文件應如下所示

<?php require_once('vendor/autoload.php'); use GuzzleHttp\Client; use GuzzleHttp\Psr7\Request; $client = new GuzzleHttp\Client(); $headers = [ 'x-api-key' => <YOUR API KEY>, 'Content-Type' => 'application/json' ]; $body = json_encode([ "url" => "https://twitter.com" ]); $request = new Request('POST', 'https://api.geekflare.com/metascraping', $headers, $body); $response = $client->sendAsync($request)->wait(); echo $response->getBody(); ?>

保存腳本,關閉它並使用

php script.php

您應該得到以下輸出:

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

最後的話

本指南介紹了使用 Geekflare Metascraping API 的不同方式。

Metascraping API 還允許您提供更多參數,而不僅僅是 URL 參數。 其中一個參數是代理參數,只能通過 Geekflare API 高級計劃訪問。 無論如何,Geekflare API 仍然足夠強大,可以用於許多用途。

查看 Geekflare API 的官方文檔以獲取更多信息。