ヘッドレス・ブラウザとプロキシを使ってあらゆるウェブサイトをスクレイピングする

プロキシ, スクレイピング, 10月-1820215分で読める

ヘッドレス・ブラウザ」と聞いても、ブラウザが技術的にどのように機能するかを深く知らない限り、日常生活で遭遇するような身近な技術ガジェットではないだろう。Google Chrome、Firefox、Safariなど、一風変わったブラウザをご存知の方がほとんどだろう。唯一の違いは、ヘッドレス・ブラウザは

ヘッドレス・ブラウザ」と聞いても、ブラウザが技術的にどのように機能するかを深く知らない限り、日常生活で遭遇するような身近な技術ガジェットではないだろう。

グーグル・クローム、ファイアフォックス、サファリなど、特殊なブラウザをご存知の方は多いだろう。唯一の違いは、ヘッドレス・ブラウザとは、そのような特殊なブラウザからヘッドを取り除いたものだということです。次のセクションでは、ヘッドレス・ブラウザの意味と利点について説明します。

ヘッドレス・ブラウザとは?

もしGoogle ChromeやFirefoxにGUIがなかったら、あなたの生活はどうなるか想像できますか?あなたがソフトウェア・エンジニアかハイテクに長けた人でない限り、わざわざそれを使うことはないだろう。

したがって、ヘッドレス・ブラウザは、派手なボタンやアイコン、スクロールバー、ある場所から別の場所へのナビゲーションを可能にするリンクなしで動作する。そのため、ヘッドレス・ブラウザとの通信を確立する唯一の方法は、ネットワークを介したコマンドライン・インターフェイスを使用することである。 

技術的には、ヘッドレス・ブラウザはGUIを持たずにJavaScriptインタプリタ、ネットワーク・コンポーネント、レイアウト、レンダリング・エンジンを持つ。

では、GUIのあるブラウザを使えば同じ結果が得られるのに、ヘッドレス・ブラウザを使うことで一体何が得られるのだろうか?

以下、その答えを探してみよう。

なぜヘッドレス・ブラウザを使うのか?

まず第一に、ヘッドレス・ブラウザは通常のブラウザよりも比較的高速です。これは主に、通常のブラウザのようにCSS、Javascript、HTMLを読み込まないためです。また、標準的なブラウザに比べてメモリの使用量も少なく、ホスティングリソースも大幅に少なくて済みます。

また、ヘッドレスブラウザは、ウェブやモバイルアプリのテスト、品質、開発全体を自動化することで、生産性と時間を節約します。さらに、ヘッドレス・ブラウザはネットワーク・アプリケーションのパフォーマンスを監視し、画像のレンダリングとキャプチャ・プロセスを自動化してレイアウトを自動チェックすることができます。

ヘッドレス・ブラウザを使えば、スクレイピングの前にウェブサイトを手動で立ち上げることなく、ウェブサイトをスクレイピングできる。ウェブサイトのHTMLをすぐにスクレイピングできる。

さらに、ヘッドレス・ブラウザはグーグルの検索結果において重要な役割を果たしている。検索エンジンがウェブページをインデックスするのに必要なのはページのHTMLソースだけなので、ヘッドレス・ブラウザはJavascriptを実行し、コンテンツをその場で埋めることでこれを可能にしている。このため、ヘッドレス・ブラウザも急速に発展している。

ヘッドレス・ブラウザは何に使われるのか?

以下は、ヘッドレス・ブラウザが実行するタスクの簡単なリストである:

ウェブサイト・テスト

ヘッドレス・ブラウザを使う主な目的は、ウェブ・アプリケーションの機能やUI機能をテストすることだ。フィールドへのデータ入力、フォームへの入力、負荷のシミュレーション、ワークフロー全体の確認といった日常的なテスト作業を自動化することで、ウェブ・アプリケーションをテストすることができる。一方、GUIを持たないシステムのテストも自動化できる。

ヘッドレスブラウザは、ユーザーがウェブサイトのUI/UXコンポーネントとどのようにインタラクションするかをテストすることもできます。ボタンのクリック、スクロール、色の選択、フォントの種類、ウェブページのレイアウトとのインタラクションを自動化することでこれを実現します。 

ページレイアウトのテストには、ウェブページのデフォルトサイズと座標を特定することも含まれます。 

ヘッドレス・ブラウザはウェブページのスクリーンショットを撮り、PDFとして保存することができる。さらに、JavaScriptとAjaxの実行テストも提供している。

ヘッドレスブラウザが処理できるその他の主なテストには、パフォーマンス診断のためのウェブサイトのタイムライントレースのキャプチャがあります。

ウェブ・スクレイピング

ヘッドレスブラウザの人気は、ウェブアプリのテストだけでなく、かなりの量のウェブスクレイピングにも起因している。ヘッドレス・ブラウザは、ウェブ・スクレイパーが本物のブラウザをロードして模倣することで、最も困難なウェブサイトからデータを収集することを可能にする。

このような抽出は、JavaScriptの普及により困難になっているデータをスクレイピングするためのHTML抽出ツールの必要性を無効にする。このような抽出ツールを使用する際の懸念事項には、非同期ロード、ブラウザフィンガープリント、無限スクロールなどがある。

タスクの自動化

上記の最初のポイントでは、ウェブアプリのテストに関連するヘッドレス・ブラウザを使ったタスクの自動化について説明した。つまり、自動化に追加されるのは、ヘッドレス・ブラウザを利用してウェブサイトのインタラクションを自動化し、リソースを占有することなく1台のマシンで多数のブラウザを模倣する機能だけだ。

ヘッドレス・ブラウザにはどのような種類がありますか?

世の中にはいくつかのヘッドレス・ブラウザがある。ウェブ開発者として、テストケースの自動化やウェブスクレイピングに最適な組み合わせを得るためには、様々なフレーバーのヘッドレスブラウザを試す必要がある。

その正体を探ろう:

Google Chromeヘッドレスブラウザ(バージョン59以上)

オープンソースのGoogle Chromiumプロジェクトをベースとした、軽量のヘッドレスブラウザである。JavaScriptをサポートし、BSDライセンスである。

コマンドラインインターフェイスを備えており、ウェブサイトデータを即座にスキャンしてスクレイピングすることができる。さらに、メモリ消費量が少なく、革新的な機能、ユーザーフレンドリーなウェブ開発ツール、開発者フレンドリーの特定ツールを備えている。Headless Chromeは、Windows、Mac OS X、Linuxを含むすべてのプラットフォームで動作する。

ウェブデベロッパーは、ウェブサイトからデータをスクレイピングしたり、ウェブサイトからスクリーンショットを撮ったり、ウェブページからPDFファイルを作成したりするのによく使う。ヘッドレスクロームのさらに魅力的な点は、ブラウザのGUIを読み込むことなくデータや画像をスクレイピングできることだ。

開発者はまた、ヘッドレスブラウザを利用して、モバイルデバイスとデスクトップデバイスのユーザーが簡単にナビゲートできるように、さまざまなレベルのナビゲーションをテストします。

そして、PuppeteerとSeleniumは、ヘッドレスChromeをコントロールする最も一般的なツールの2つである。ご存知のように、Seleniumはテスト分野ですでに名を馳せている。一方、Puppeteerはプロキシを使ってページをクロールし、コンポーネントをクリックし、データをダウンロードする。

HtmlUnit

HtmlUnitはJavaで開発されたヘッドレス・ブラウザで、ウェブサイトとユーザーとのインタラクションを自動化する。このブラウザは、ウェブサイトをテストしたり、ウェブサイトから情報を取得したりするのに理想的である。HtmlUnitは、他のブラウザに比べてインストールが最も簡単です。

HTMLUnitは、サイトのセキュリティ、フォーム送信、ナビゲーションなど、eコマースサイトの機能の作成とテストにも使用できます。開発者としては、HTTP 認証、HTTPS ページのパフォーマンス、HTTP ヘッダーのパフォーマンス、他のウェブサイトへのリンクのリダイレクト、フォームへの入力や送信プロセスなどに使用できます。 

Mozilla Firefoxヘッドレスブラウザ(バージョン56以上)

Firefoxのヘッドレスバージョンは、バージョン56以上で利用できる。これにより、開発者は複数のAPIを同時に実行できるようになる。その際、ウェブ開発に付随するテストのために複数のシミュレーションツールを使用する必要はない。

そのため、Selenium、Slimmer JS、W3C WebDriver などの Web ドライバをヘッドレス Firefox と組み合わせて、Web ブラウザの自動テストを行うことができます。Selenium は、私が言及した 3 つの Web ドライバのうち、Firefox のヘッドレスバージョンでテストと自動化プロセスを実行するために推奨されるドライバです。

ファントムJSウェブキット

Phantom JSは、スクリプトを実行できるオープンソースのWebKitヘッドレスブラウザです。JavaScript、PHP、Objective-C、C#、Python、Java、Haskell、Ruby、Rの各APIで動作し、3-ClauseとBSDを使用しています。 

Phantom JS は、DOM 操作、SVG、CSS セレクタ、Canvas、JSON などのウェブ開発操作をネイティブにサポートします。一方、Webブラウザの自動化テストや処理では、コマンドラインインターフェイスを介した通信により、多くの複雑な処理を管理します。

開発者は、ウェブページのスクリーンショットをキャプチャしたり、動作予測を行ったり、マルチレベルのテストナビゲーションを行ったり、複数のアサーション・タイプと対話したりするために、ファントムJSを頻繁に使用する。

ヘッドレス・ブラウザを使用し、ブラックリストに載らないようにする。

すでにお分かりのように、ヘッドレス・ブラウザの実用的な使い方のひとつにウェブ・スクレイピングがあります。このセクションでは、ヘッドレスブラウザを使ってスクレイピングしている間にブラックリストに載ったりブロックされたりするのを防ぐ方法を理解します。

Seleniumのようなツールが、Google ChromeヘッドレスやFirefoxヘッドレスのようなヘッドレスブラウザを使ってデータをスクレイピングする場合、対象となるウェブサイトからは、人間ではなくロボットがウェブサイトをクロールしているように見えるだろう。

例えば、ほとんどのウェブサイトはPHPのような高級言語でプログラムされているため、クリックスルー率を検出することができる。つまり、ユーザーがサイト内の別のページに移動するためにボタンをクリックしたのか、それともボタンをクリックせずに単にURLにアクセスしたのかが分かる。

開発者であれば、Seleniumのようなツールをコーディングして、ヘッドレス・ブラウザを使用しているときに、ウェブサイトを入力したり、クリックしたり、スクロールしたりすることができる。そうすれば、アクセス先のウェブサイトは、ロボットではなく人間がアクセスしていることを明確にすることができる。

しかし、ヘッドレスブラウザでSeleniumを使うことにはデメリットがあるかもしれない。最大の懸念は、ウェブページをスクレイピングしている間のスピードが遅いことだろう。とはいえ、この遅さは、上記のセクション "なぜヘッドレスブラウザを使うのか?"で説明したヘッドレスブラウザの他の利点に比べれば、無視できるものかもしれません。

一方、ウェブサイトをスクレイピングするスピードには関係なく、単にページを切り替えるだけの問題である。全体として、ヘッドレス・ブラウザでウェブサイトをスクレイピングすることは、無視できる欠点を捨てることができる場合、試してみる価値がある。

ヘッドレス・ブラウザで回転プロキシを使用する方法

このセクションでは、ヘッドレスブラウザでスクレイピングするために、なぜ回転プロキシが必要なのかを理解する。

プロキシサーバーとヘッドレスブラウザを使用してウェブサイトからデータをスクレイピングする場合、ウェブサイトのサーバーがあなたのIPアドレスを制限することなく、匿名でデータをスクレイピングすることができます。

ローテーション・プロキシを使って、地域制限のあるウェブサイトにアクセスし、データをスクレイピングすることができます。これを実現するには、ProxyScrape が提供するレジデンシャル・ローテーティング・プロキシ・プールを使用すると、ターゲットウェブサイトにブロックされることなく、複数の場所からIPを使用してスクレイピングすることができます。さらに、例えばAmazonのようなeコマースプラットフォームから、かなりのリクエスト数で商品データをスクレイピングすることができる。

ProxyScrape IPアドレスをローテーションさせることで、ウェブサイト上で複数のセッションを実行することができる。これにより、大量のデータリクエストをブロックする包括的なIP制限を回避することができる。

プロキシをローテーションさせれば、ヘッドレスブラウザでタスクを自動化しようとしたときに発生するBANを乗り越えるのにも役立つだろう。

結論

ヘッドレス・ブラウザとは何か、いつ、なぜ使われるのか、そして様々なタイプがあることはお分かりいただけただろう。また、スクレイピング中のブロックを回避する方法についても触れた。回転プロキシを使用すると、匿名性と他の多くの利点をもたらすので、スクレイピングプロセスをさらに後押しするだろう。

というわけで、結論として、この記事で紹介したメカニズムを実装してほしい。ヘッドレス・ブラウザを使ったウェブ・スクレイピングに直面したら、そうしなければならない。