PhantomJSでウェブサイトをスクレイピングする方法

ヘッドレスウェブブラウザの力を活用し、データ収集作業を効率化するとともに、完全自動化された代替手段を学ぶ方法
1 分読
How to Scrape Websites with PhantomJS

本記事では以下の内容を解説します:

  • PhantomJSの謎を解き明かす
  • PhantomJSを用いたデータクローリングの長所と短所
  • PhantomJSデータ収集ステップバイステップガイド
  • データ自動化:手動スクレイピングより簡単な代替手段

PhantomJSの謎を解き明かす

PhantomJSは「ヘッドレスWebブラウザ」です。つまりグラフィカルユーザーインターフェース(GUI)がなく、スクリプトのみで動作します(これにより軽量化・高速化・効率化が図られます)。JavaScript(JS)を用いたコードテストやデータ収集など、様々なタスクの自動化に活用できます。

初心者の場合、まずCLIで「npm」を使用してPhantomJSをコンピュータにインストールすることをお勧めします。以下のコマンドを実行してください:

npm install phantomjs -g

これで「phantomjs」コマンドが使用可能になります。

PhantomJSを用いたデータクローリングの長所と短所

PhantomJSには多くの利点があります。前述のように「ヘッドレス」であるため、テストや情報取得にグラフィックをロードする必要がなく、処理が高速化されます。

PhantomJSは以下を効率的に達成するために使用できます:

スクリーンキャプチャ

PhantomJSは、スナップショットの取得とPNG、JPEG、さらにはGIF形式での保存プロセスを自動化するのに役立ちます。この機能により、フロントエンドのユーザーインターフェース/ユーザーエクスペリエンス保証の実施が格段に容易になります。例えば、競合他社の製品リストの画像を収集したり、自社製品のリストが正しく表示されていることを確認したりするために、コマンドラインでPhantomjs amazon.jsを実行することができます。

ページ自動化

これはPhantomJSの大きな利点であり、開発者の大幅な時間節約につながります。Phantomjs userAgent.jsのようなコマンドラインを実行することで、開発者は特定のウェブページに関連するJSコードを記述・検証できます。ここでの主な時間節約効果は、このプロセスを自動化でき、ブラウザを開くことなく実行できる点にあります。

テスト

PhantomJSは、Seleniumなどの他の人気ウェブスクレイピングツールと同様に、プロセスを効率化するため、ウェブサイトのテストに有利です。GUIのないヘッドレスブラウジングにより、問題の検出が高速化され、エラーコードがコマンドラインレベルで発見・通知されます。

開発者はまた、コードを本番環境に公開する前にテストするため、PhantomJSを様々な継続的インテグレーション(CI)システムと統合します。これにより開発者はリアルタイムで不具合のあるコードを修正でき、よりスムーズなプロジェクト運用が保証されます。

ネットワーク監視/データ収集

PhantomJSはネットワークトラフィック/アクティビティの監視にも利用可能です。多くの開発者は以下のような対象データの収集に役立つようプログラムします:

PhantomJS使用の主な欠点:

  • 悪意のある者による自動攻撃の実行に悪用される可能性(主にユーザーインターフェースを使用しないという特性が原因)
  • フルサイクル/エンドツーエンドテストや機能テストにおいて、時に扱いにくい場合がある

PhantomJSデータ収集のステップバイステップガイド

PhantomJSはNodeJS開発者の間で広く普及しているため、NodeJS環境での使用例を紹介します。この例ではURLからHTMLコンテンツを取得する方法を示します。

ステップ1: package.jsonの設定とnpmパッケージのインストール

プロジェクトフォルダを作成し、その中に「package.json」ファイルを作成します。

{
"name": "phantomjs-example",
"version": "1.0.0",
"title": "PhantomJS Example",
"description": "PhantomJS Example",
"keywords": [
      "phantom example"
],
"main": "./index.js",
"scripts": {
	"inst": "rm -rf node_modules && rm package-lock.json && npm install",
    "dev": "nodemon index.js"
},
"dependencies": {
    "phantom": "^6.3.0"
}
}

次に、ターミナルで次のコマンドを実行します:$ npm install。これにより、Phantom がローカルプロジェクトフォルダ「node_modules」にインストールされます。

ステップ2: Phantom JSスクリプトの作成

JSスクリプトを作成し、「index.js」と命名します

const phantom = require('phantom');

const main = async () => {
  const instance = await phantom.create();
  const page = await instance.createPage();
  await page.on('onResourceRequested', function(requestData) {
    console.info('Requesting', requestData.url);
  });

  const url = 'https://example.com/'; 
  console.log('URL::', url);

  const status = await page.open(url);
  console.log('STATUS::', status);

  const content = await page.property('content');
  console.log('CONTENT::', content);

  await instance.exit();
};

main().catch(console.log);

ステップ3: JSスクリプトの実行

スクリプトを実行するには、ターミナルで$ node index.js を実行します。結果として HTML コンテンツが表示されます。

ソース:npmjs

データ自動化:手動スクレイピングのより簡単な代替手段

大規模なデータスクレイピングにおいては、PhantomJSの代替手段を活用することを好む企業もあるでしょう。 

代替手段には以下が含まれます:

  1. プロキシ: プロキシを使用したウェブスクレイピングは 、ユーザーが無限の同時リクエストを送信して大規模なデータ収集を可能にする点で有益です。 また、レート制限や地理的位置情報に基づくブロックなど、対象サイトの遮断対策にも役立ちます。この場合、企業は国/都市固有のモバイルプロキシやレジデンシャルIP/デバイスを活用してデータリクエストをルーティングし、より正確なユーザー向けデータ(競合他社の価格設定、広告キャンペーン、Google検索結果など)を取得できます。
  1. すぐに使えるデータセット: データセットは本質的に「情報パッケージ」であり、既に収集済みで、アルゴリズムやチームに即時利用可能な状態で提供されます。通常、対象サイトからの情報を含み、ウェブ上の関連サイトから強化されています(例:複数のベンダーにおける関連カテゴリの製品情報や、様々なeコマースマーケットプレイス)。 データセットは定期的に更新され、全データポイントの最新性が保証されます。最大の利点は、データ収集に時間やリソースを一切費やさずに済むため、データ分析や顧客価値創出により多くの時間を割ける点です。 
  2. 完全自動化WebスクレイパーAPI: WebスクレイパーAPIは、コード不要・インフラ不要でカスタマイズ可能な使いやすいデータ収集ソリューションです。ソフトウェアやハードウェアの開発・保守の手間なく、構造化されたウェブデータを容易に収集できます。

Bright Dataのデータエキスパートにご相談いただき、お客様のウェブスクレイピングニーズに最適な製品をご確認ください。