如何使用 techblik.com Meta Scraping API 提取网站元数据

网络抓取与元数据抓取

通常来说,网络抓取是指从网页加载时生成的 HTML 代码中提取网站数据。而元数据抓取,则侧重于从网页的元标记中提取网页的元信息。

网页的元数据是关于页面的信息,而不是页面本身的内容。 例如,元数据可能包括作者姓名、页面标题以及网页的描述等,这些信息有助于用户和搜索引擎了解页面的主题内容。 通过抓取元数据,用户可以更快速地收集到关于网页的关键信息。

可以使用多种方法来抓取网页的元数据,包括手动操作、利用现有的库,或者使用诸如 techblik.com 提供的 Metascraping API 等服务。

多种实现方式

若要手动抓取,您可以使用 Chrome DevTools 打开网页,然后在“元素”选项卡中提取元数据。 然而,当您需要处理大量页面时,这种手动方式会变得重复且繁琐。为了提高效率,我们可以采用以下几种自动化方法:

第一种方法是完全从零开始编写代码。 这需要您向目标网站发送 HTTP 请求,然后解析返回的 HTML 代码,使用正则表达式或模式匹配等技术从元标记中提取所需的数据。 但这种做法就像是重新发明轮子,会浪费大量时间在重复编写现有代码上。

第二种方法是借助各种编程语言提供的库来实现。 这种方式可以简化实现细节,使开发过程更加方便。 然而,如果您的编程语言没有合适的库,或者您使用的特定运行时环境不支持所需的库,那么这种方法将无法使用。

第三种方法是使用 techblik.com Metascraping API 这样的服务。 这种方法十分理想,因为它提供了一个统一的接口,无论您使用哪种编程语言都可以方便地调用。 只要支持发送 HTTP 请求,就可以使用任何语言来操作。

本文将演示如何结合 cURL、PHP 和 JavaScript (NodeJS) 使用 techblik.com Metascraping API。

相比其他方法,使用 techblik.com API 的优势在于:

  • 它不受编程语言和运行时环境的限制。
  • 您可以避免重复造轮子,从而节省大量的编码时间。
  • 您可以高效地抓取多个网站的数据(在几秒钟内完成)。
  • 它非常容易上手和使用。
  • 您可以免费使用。

开始使用 techblik.com API

要使用 techblik.com API,您需要一个 API 密钥。 您可以访问 techblik.com 网站并创建一个免费帐户来获取密钥。 创建帐户后,登录仪表板,您就可以看到您的 API 密钥。

API 的端点位于 https://api.techblik.com/metascraping。 发出请求时,您需要在请求标头中提供 API 密钥,键名为 x-api-key,值是您的 API 密钥。

此外,您还需要在请求正文中传递其他参数,包括 url、device 和 proxyCountry。

  • url:指定要抓取元数据的网页的 URL。
  • device:指定用于访问网站的设备类型,可以选择移动设备或桌面设备。
  • proxyCountry:指定在抓取数据之前请求应来自的国家/地区。 这是一个高级功能,仅在 techblik.com 的付费计划中提供。

由于这些参数将作为请求正文的一部分传递,因此请求必须是 POST 请求,因为 GET 请求无法携带元数据。

在第一个演示中,我们将使用命令行工具 cURL 来发送 Metascraping API 请求。 您需要先安装 cURL 才能使用它。

我将使用 Bash 终端,这通常是 macOS 和 Linux 的默认终端。 对于 Windows,您需要安装 Git Bash。

安装 cURL 后,您就可以使用 cURL 命令发起请求了。 我们需要向命令传递参数,以指定请求方法、端点、请求正文和请求头。

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

注意:前三行后的反斜杠允许您将命令拆分成多行显示。

此命令将 HTTP 方法指定为 POST,并将端点指定为 techblik.com 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"}}

这是预期的输出结果。

接下来,我们将创建一个 NodeJS 脚本,从 API 获取数据。 您需要先安装 NodeJS,以及 NPM 或其他 Node 包管理器来管理项目的依赖项。 我仍然会使用 Bash 终端来运行命令。

首先创建一个空的项目文件夹,并在终端中打开它:

mkdir metascraping-js && cd metascraping-js

之后,创建我们的脚本文件:

touch index.js

然后,将项目初始化为 Node 项目:

npm init -y

为了在文件中使用 ESModule 语法,在 package.json 文件的根目录下添加 `”type”: “module”`,如下所示:

{
  "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 功能的 API,使得在 NodeJS 中发起 HTTP 请求更加容易。

npm install node-fetch

安装完成后,就可以编辑脚本了。使用您喜欢的文本编辑器打开 index.js 文件。我将使用基于终端的 nano 文本编辑器:

nano index.js

在 index.js 文件中,首先导入 fetch 函数,它是 node-fetch 模块的默认导出:

import fetch from 'node-fetch'

然后,定义请求的主体,这是一个包含 url 属性的 JSON 字符串。 url 属性的值是我们想要获取元数据的网页的 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 密钥。

请将 替换为您实际的 API 密钥。 实际上,API 密钥不应该硬编码到文件中,而应该使用环境变量加载。 最后,将 body 属性指定为之前定义的 body 常量的值。

最后,调用 fetch:

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

这里,我们调用了 fetch 函数,传入了 API 端点和之前定义的选项。 由于 fetch 返回一个 Promise,我们附加了一个回调来解析 JSON 响应。 回调返回另一个 Promise,当它解决时,我们使用 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.techblik.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'
  }
}

在 PHP 中使用 techblik.com API

要在 PHP 中使用 techblik.com Metascraping API,请确保您的本地计算机已安装 PHP 和 Composer。

首先,创建并打开一个项目文件夹:

mkdir metascraping-php && cd metascraping-php

接下来,安装 GuzzleHTTP。Guzzle 是一个常用的 PHP HTTP 客户端库,可以与 techblik.com API 一起使用:

composer require guzzlehttp/guzzle

安装 Guzzle 后,创建一个脚本文件:

touch script.php

然后开始编写代码。 使用您选择的文本编辑器打开 script.php 文件。 我将继续使用 nano:

nano script.php

在脚本中,添加标准的 PHP 代码块:

<?php
    // All code goes here
?>

接下来,加载必要的扩展,并从 Guzzle 导入 Request 和 Client 类。 这段代码需要写在之前 代码块之间:

require_once('vendor/autoload.php');

use GuzzleHttp\Client;
use GuzzleHttp\Psr7\Request;

实例化 GuzzleHttp\Client 类来创建客户端:

$client = new Client();

为请求定义标头。 此请求需要提供两个标头,一个指定正文内容类型为 JSON,另一个包含您的 API 密钥:

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

将 <YOUR API KEY HERE> 替换为您的 techblik.com API 仪表板提供的实际 API 密钥。

接下来,定义请求主体。 在本例中,请求主体是一个 JSON 字符串,其中的 url 属性设置为 “https://twitter.com”:

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

要创建请求,需要实例化之前导入的 Request 类,传入请求方法、端点、标头和请求主体:

$request = new Request('POST', 'https://api.techblik.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 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.techblik.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"
     }
}

总结

本指南介绍了使用 techblik.com Metascraping API 的多种方法。

Metascraping API 还允许您提供更多的参数,而不仅仅是 URL 参数。 其中一个参数是代理参数,但该参数只有通过 techblik.com API 的高级计划才能使用。 尽管如此,techblik.com API 仍然足够强大,可以满足多种不同的使用场景。

有关更多信息,请参阅 techblik.com API 的官方文档。