웹 스크래핑은 웹 페이지가 표시될 때 생성되는 HTML 코드로부터 웹사이트의 데이터를 추출하는 일반적인 방법입니다.
반면, 메타스크래핑은 웹 페이지의 메타 태그에서 웹 페이지의 메타데이터를 가져오는 작업입니다.
웹 페이지의 메타데이터는 해당 페이지에 대한 정보이지만, 페이지의 실제 내용과는 다릅니다. 예를 들어, 메타데이터에는 작성자 이름, 제목, 그리고 웹 페이지에 대한 간략한 설명이 포함될 수 있습니다.
이러한 메타데이터는 사용자와 검색 엔진이 페이지 내용을 파악하는 데 도움을 줍니다. 메타데이터 스크래핑을 통해 사용자들은 웹 페이지에 대한 정보를 짧은 시간 안에 빠르게 얻을 수 있습니다.
웹 페이지에서 메타데이터를 추출하는 방법에는 여러 가지가 있습니다. 수동 스크래핑, 라이브러리 활용, 또는 koreantech.org Metascraping API와 같은 API를 사용하는 방법 등이 있습니다.
다양한 접근 방식
수동으로 스크래핑을 하려면, Chrome 개발자 도구를 사용하여 웹 페이지를 열고 ‘요소’ 탭에서 메타데이터를 직접 추출할 수 있습니다. 하지만 여러 페이지를 처리해야 할 때는 반복적이고 지루한 작업이 될 수 있습니다. 이러한 작업을 자동화하기 위해 여러 가지 접근 방식을 사용할 수 있습니다.
가장 먼저, 처음부터 코드를 직접 작성하는 방법이 있습니다. 이 방법은 메타데이터를 추출하려는 웹사이트에 HTTP 요청을 보내고, 정규 표현식이나 패턴 매칭을 이용하여 메타 태그에서 데이터를 추출하는 방식으로 HTML 응답을 분석합니다. 하지만 이는 이미 존재하는 코드를 다시 작성하는 것이므로 시간 낭비가 될 수 있습니다.
두 번째로, 원하는 프로그래밍 언어로 제공되는 라이브러리를 사용하는 방법이 있습니다. 이 방법은 구현 세부 사항을 추상화하여 작업을 간소화할 수 있습니다. 그러나 사용하는 프로그래밍 언어에 적합한 라이브러리가 없거나, 특정 런타임 환경이 라이브러리를 지원하지 않을 경우 사용할 수 없습니다.
세 번째 방법은 koreantech.org Metascraping API와 같은 API를 이용하는 것입니다. 이 방법은 프로그래밍 언어에 관계없이 일관된 인터페이스를 제공하기 때문에 이상적입니다. HTTP 요청을 지원하는 어떤 언어에서든 활용할 수 있습니다.
이 문서에서는 cURL, PHP, 그리고 JavaScript(NodeJS) 환경에서 koreantech.org Metascraping API를 사용하는 방법을 설명합니다.
다른 방법들의 단점을 고려할 때, koreantech.org API를 사용하면 다음과 같은 이점을 얻을 수 있습니다.
- 언어 및 런타임 환경에 제약이 없습니다.
- 코드를 직접 작성하는 데 소요되는 시간을 줄여줍니다.
- 여러 웹사이트에서 효율적으로 데이터를 추출할 수 있습니다 (단 몇 초 만에).
- 사용하기 매우 쉽습니다.
- 무료로 이용 가능합니다.
koreantech.org API 시작하기
koreantech.org API를 사용하려면 먼저 API 키를 발급받아야 합니다. koreantech.org 웹사이트를 방문하여 무료 계정을 생성하면 API 키를 얻을 수 있습니다. 계정 생성 후, 대시보드에서 API 키를 확인할 수 있습니다.
API 엔드포인트는 https://api.koreantech.org.com/metascraping 에 위치해 있습니다. 요청을 보낼 때, ‘x-api-key’라는 이름의 헤더에 API 키 값을 포함시켜야 합니다.
또한, 요청 본문에 추가 매개변수를 전달해야 합니다. URL, 장치, 프록시 국가 등이 있습니다.
- URL은 메타데이터를 가져오려는 웹 페이지의 주소를 나타냅니다.
- 장치는 메타데이터를 스크랩할 때 웹사이트에 접속하는 데 사용되는 장치를 지정합니다 (모바일 또는 데스크톱).
- 프록시 국가는 데이터를 가져오기 전에 요청해야 하는 국가를 지정합니다. 다만 프록시 국가 설정은 유료 기능이며, koreantech.org 유료 플랜 사용자만 이용 가능합니다.
매개변수가 요청 본문에 포함되어 전달될 때는 GET 요청이 아닌 POST 요청을 사용해야 합니다. GET 요청은 본문을 허용하지 않기 때문입니다.
첫 번째 예시에서는 명령줄에서 cURL 유틸리티를 사용하여 Metascraping API를 호출합니다. cURL을 사용하려면 먼저 설치해야 합니다.
Bash 터미널을 사용할 예정입니다. macOS 및 Linux에서는 기본 터미널로 제공되며, Windows에서는 Git Bash를 설치해야 합니다.
cURL 설치 후, 명령에 옵션을 추가하여 요청 매개변수(요청 메서드, 엔드포인트, 요청 본문, 헤더)를 지정하여 요청을 보낼 수 있습니다.
curl -X POST https://api.koreantech.org.com/metascraping -d '{ "url": "https://tesla.com" }' -H 'Content-Type: application/json' -H 'x-api-key: <API_KEY>'
참고: 백슬래시를 사용하여 명령을 여러 줄로 분리할 수 있습니다.
이 명령은 HTTP 메서드를 POST로 설정하고, 엔드포인트를 koreantech.org API 메타 스크래핑 엔드포인트로 지정합니다.
요청 본문은 URL 속성이 https://tesla.com 인 JSON 객체로 전달됩니다. 또한, 본문 콘텐츠 유형을 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"}}
이것이 올바른 출력입니다.
이제 API로부터 데이터를 가져오는 NodeJS 스크립트를 만들어보겠습니다. NodeJS가 시스템에 설치되어 있어야 하며, 프로젝트의 의존성을 관리하기 위해 NPM(또는 다른 패키지 매니저)도 필요합니다. 또한 Bash 터미널을 사용하여 명령어를 실행할 것입니다.
JavaScript로 API를 사용하기 위해 먼저 빈 프로젝트 폴더를 생성하고 터미널에서 엽니다.
mkdir metascraping-js && cd metascraping-js
그 다음, 스크립트를 작성할 파일을 만듭니다.
touch index.js
프로젝트를 노드 프로젝트로 초기화합니다.
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와 유사한 기능을 제공하여 HTTP 요청을 더 쉽게 만들 수 있도록 합니다.
npm install node-fetch
패키지가 성공적으로 설치되면, 스크립트 편집을 시작할 수 있습니다. 원하는 텍스트 편집기를 사용하여 index.js 파일을 엽니다. 여기서는 터미널 기반 nano 텍스트 편집기를 사용합니다.
nano index.js
index.js 파일에서 node-fetch 모듈에서 기본 내보내기로 제공되는 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 데이터가 포함되어 있다는 것을 알려주는 ‘Content-Type’ 헤더와 API 키를 제공하는 ‘x-api-key’ 헤더를 정의했습니다.
<YOUR API KEY> 부분을 실제 API 키로 대체해야 합니다. API 키는 파일에 직접 하드코딩하지 않고 환경 변수를 사용하는 것이 좋습니다. 마지막으로, body 속성을 이전에 정의한 body 상수로 지정했습니다.
이제 fetch 함수를 호출합니다.
fetch('https://api.koreantech.org.com/metascraping', options) .then(response => response.json()) .then(json => console.log(json))
여기에서 fetch 함수를 호출하여 API 엔드포인트와 이전에 정의한 옵션을 전달했습니다. fetch 함수는 Promise를 반환하므로 then 메서드를 사용하여 JSON 응답을 분석하는 콜백을 연결했습니다.
콜백은 또 다른 Promise를 반환하고, 이 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.koreantech.org.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에서 koreantech.org API 사용
koreantech.org Metascraping API를 사용하기 전에 시스템에 PHP와 Composer가 설치되어 있는지 확인하십시오.
프로젝트 폴더를 만들고 엽니다.
mkdir metascraping-php && cd metascraping-php
다음으로 GuzzleHTTP를 설치합니다. Guzzle은 koreantech.org API와 함께 사용할 수 있는 PHP 클라이언트 중 하나입니다.
composer require guzzlehttp/guzzle
Guzzle이 설치되면, 다음 명령을 사용하여 스크립트를 만들 수 있습니다.
touch script.php
원하는 텍스트 편집기를 사용하여 script.php 파일을 엽니다. 여기서는 터미널 기반 텍스트 편집기인 nano를 사용합니다.
nano script.php
스크립트 내부에 기본적인 PHP 코드를 작성합니다.
<?php // 여기에 코드를 작성합니다. ?>
이제 Guzzle에서 필요한 요청 및 클라이언트 클래스를 가져옵니다. 다음 코드는 <?php 와 ?> 사이에 작성해야 합니다.
require_once('vendor/autoload.php'); use GuzzleHttpClient; use GuzzleHttpPsr7Request;
다음으로, GuzzleHttpClient 클래스를 인스턴스화하여 클라이언트를 생성합니다.
$client = new GuzzleHttpClient();
이제 요청에 대한 헤더를 정의할 수 있습니다. 이 요청에서는 두 개의 헤더를 제공합니다. 하나는 본문의 콘텐츠 형식이 JSON임을 지정하고, 다른 하나는 API 키를 포함합니다.
$headers = [ 'x-api-key' => <YOUR API KEY HERE>, 'Content-Type' => 'application/json' ];
<YOUR API KEY HERE> 부분을 koreantech.org API 대시보드에서 얻은 실제 API 키로 변경해야 합니다.
다음으로, 요청 본문을 정의합니다. 이 경우, 본문은 url 속성이 “https://twitter.com”으로 설정된 JSON 문자열입니다.
$body = json_encode([ "url" => "https://twitter.com" ]);
요청을 생성하기 위해 앞에서 가져온 요청 클래스를 인스턴스화하고, 요청 메서드, 엔드포인트, 헤더 및 요청 본문을 전달합니다.
$request = new Request('POST', 'https://api.koreantech.org.com/metascraping', $headers, $body);
이제 클라이언트를 사용하여 요청을 보냅니다.
$response = $client->sendAsync($request)->wait();
마지막으로, 응답 본문을 추출하여 콘솔에 출력합니다.
echo $response->getBody();
코드를 올바르게 작성했다면, script.php 파일은 다음과 같아야 합니다.
<?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.koreantech.org.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" } }
결론
이 가이드에서는 koreantech.org Metascraping API를 사용하는 다양한 방법에 대해 알아보았습니다.
Metascraping API를 사용하면 URL 외에도 여러 매개변수를 제공할 수 있습니다. 그 중 하나는 koreantech.org API 프리미엄 플랜에서만 접근 가능한 프록시 매개변수입니다. 그럼에도 불구하고 koreantech.org API는 다양한 용도로 사용될 수 있을 정도로 강력합니다.
더 자세한 내용은 koreantech.org API 공식 문서를 참조하십시오.