Pythonを使ってJavaScriptサイトをスクレイピングする方法

ハウツー, パイソン, スクレイピング, 11月-1520225分で読める

ウェブ・ブラウザは、ユーザーにダイナミックでインタラクティブな体験を提供するためにJavascriptを使用している。インターネットを現代生活に欠かせないものにしているアプリケーションや機能の大部分は、Javascriptの形でエンコードされている。Javascriptが登場した当初を考えると、ウェブページは静的で、リンクをクリックするだけで、ユーザーとのインタラクションはほとんどなかった。

目次

ウェブ・ブラウザは、ユーザーにダイナミックでインタラクティブな体験を提供するためにJavascriptを使用している。インターネットを現代生活に欠かせないものにしているアプリケーションや機能の大半は、Javascriptの形でエンコードされている。Javascriptの初期の姿を考えると、ウェブページは静的で、リンクをクリックしたり新しいページを読み込んだりするだけで、ユーザーとのインタラクションはほとんどありませんでした。 

以下は、Javascriptによって実行される動的なウェブサイトの拡張機能の一部です。

  • ウェブフォームからの入力検証
  • ページ要素のアニメーション(サイズ変更、再配置、フェードなど
  • ページをリロードせずに新しいデータをロードする
  • オーディオとビデオの再生
  • ブラウザの互換性問題の修復

スクレイピングを使って、ウェブサイトから構造化データを自動収集することができる。Webスクレイピングは、Webデータ抽出としても知られています。ウェブスクレイピングの主な使用例としては、以下のようなものがある:

  • ニュース・モニタリング
  • 価格情報
  • リードジェネレーション
  • 価格モニタリング
  • 市場調査

まず、ウェブサイトをスクレイピングする必要性を理解しよう。

なぜJavascriptのウェブサイトをスクレイピングする必要があるのか?

企業はウェブスクレイピングを利用して、公開されている膨大な量のデータを活用し、より賢い意思決定を行っている。以下は、ウェブスクレイピングが使用される分野の一部である。

  • eコマース
  • ソーシャルメディア
  • バンキング 
  • ファイナンス
  • マーケティング 
  • 不動産
  • ファイナンス
  • 検索エンジン最適化
  • セールス・リード

以下は、企業がウェブサイトをスクレイピングする必要がある理由である。

自動化 - ウェブサイトから各情報をコピー&ペーストすることは不可能である。企業はスクレイピングソフトウェアを使用して、関連するプロセスのほとんどを自動化します。

データ管理 - HTMLで構成されたウェブサイトでは、データベースやスプレッドシートを使って数値や数字を管理することはできない。そこで、企業はウェブスクレイピングツールを使ってデータを管理している。

不動産リスティング - 不動産業者は、賃貸物件や売買物件のデータベースを作成するためにウェブスクレイピングを使用する。 

ショッピング・サイトの比較データ - 各社はウェブ・スクレイピングを利用して、各小売業者から価格や商品データをかき集め、ユーザーが望む比較データを提供できるようにしている。 

業界の統計と洞察 - 企業は、膨大なデータベースを構築し、そこから業界特有の洞察を引き出すためにスクレイピングを使用する。例えば、ある企業は原油価格に関する大量のデータをスクレイピングして分析することができる。そして、その洞察を世界中の石油会社に販売することができる。

Pythonを使ったJavascriptウェブサイトのスクレイピング

Seleniumを使ってJavascriptのウェブサイトをスクレイピングする方法を見てみましょう。

Seleniumライブラリのインストール

Seleniumは以下のコマンドでインストールできる。

pipinstallselenium

ウェブドライバのインストール

Seleniumが実際のブラウザをシミュレートすることを知っていますか?クロームのインストールを使用するのではなく、ブラウザを実行するためにドライバを使用します。SeleniumのWebドライバは、言語バインディングと個々のブラウザを制御するコードの実装の両方を参照しています。ウェブドライバをダウンロードして、パス環境変数に追加してください。私たちは Firefox ウェブドライバを使用します。

ウェブサイトのタイトルを収集する単純なセレニウムの例を考えてみよう。そのために、まず、以下のように、selenium から webdriver を python ファイルにインポートします:

fromseleniumimportwebdriver

ウェブドライバーがあるパスを指定する必要がある。その後、Firefox ウェブドライバを初期化します。

webdriver_path='./'
driver= webdriver.Firefox(WEBDRIVER_PATH)

ここで、ウェブサイトのタイトルを取得するためのURLを定義する。

URL ='https://www.google.com'
ドライバー.get(URL)
print(driver.title)

上記のコードを実行すると、Firefoxのウィンドウが開き、コンソールにウェブサイトのタイトルが表示される。今回は例としてGoogleのURLを定義したので、結果はこのようになる:

これはFirefoxウェブドライバからのグーグルページです。コンソールに表示されるタイトルは次のようになります:

開いたfirefoxウィンドウを手動で閉じなければならない。コードの最後にdriver.quit()を追加して、作業終了後にウィンドウが自動的に閉じられるようにします。 

fromselenium import webdriver 

webdriver_path ='./'
driver = webdriver.Firefox(WEBDRIVER_PATH) 

URL ='https://www.google.com'
ドライバー.get(URL)
print(driver.title)
driver.quit()

動的なウェブサイトからデータを収集したい場合は、上記と同じ手順を踏むことができる。例えば、Youtubeのタイトルを取得したい場合は、以下のコードを使用することができます。

fromselenium import webdriver 
 
webdriver_path ='./'
ドライバー = webdriver.Firefox(WEBDRIVER_PATH) 
URL ='https://www.youtube.com'
driver.get(URL)
print(driver.title)
driver.quit()

ここで新しいことを試してみよう。下記のように "Keys "クラスを使って検索ボックスを編集し、"Selenium "という単語で埋めることができます。

from selenium.webdriver.common.keysimport Keys

Firefoxウェブ・ドライバを初期化し、Youtubeのタイトルを取得した後、xpathで検索ボックスを含むオブジェクトを作成する。

search_box= driver.find_element_by_xpath('//input[@id="search"]')

次に、検索ボックスの内容を編集し、「Selenium」という単語で埋める。

search_box.send_keys('Selenium')

検索ボックスに希望の内容を入力したら、「Enter」キーを押して検索を有効にする。

検索ボックス.send_keys(キー.入力)

下の画像を見ると、Youtubeの検索ボックスに「Selenium」という単語が含まれているのがわかる。

プロキシの使用

プロキシは、ローカライズされたウェブコンテンツが必要な場合に必要となる。また、短時間に多くのリクエストをウェブサイトに送信する場合にも必要です。自動テストが必要な場合は、Selenium 用のプロキシが必要です。しかし、Javascript ウェブサイトをスクレイピングするために Selenium プロキシを使うためには、Selenium のバインディングを拡張し、ブラウザによって行われる基本的なリクエストにアクセスできる Selenium ワイヤを使う必要があります。

Selenium をプロキシで使うためにインストールする必要があるパッケージは次のとおりです。

fromselenium wireimportwebdriver

Pythonのselenium-wireライブラリをインストールした後、以下のことに言及する必要がある:

  • プロキシ・ユーザー名
  • プロキシ_パスワード
  • プロキシ_url
  • プロキシポート

ここでは例として、ランダムなポート番号8080を挙げた。ユーザー名、パスワード、そしてお好みのウェブサイトのURLを設定することができます。

proxy_username = "USER_NAME"
proxy_password = "PASSWORD"
proxy_url = "Any Website URL"
proxy_port = 8080

options = {
    "proxy": {
        "http": f"http://{proxy_username}:{proxy_password}@{proxy_url}:{proxy_port}",
        "verify_ssl": False,
    },
}

Selenium ウェブドライバには、住宅用プロキシが最適です。データセンターのプロキシとは異なり、簡単に検出されないからです。住宅用IPを通してクライアントのリクエストをルーティングし、データセンターIPよりも信頼を得ることができる。また、Youtube、Google、InstagramなどのJavascriptを使用する複雑なウェブサイトへのアクセスにも便利です。

JSウェブサイトのスクレイピングにプロキシを使う理由

ウェブサイトのスクレイピングにプロキシを使う必要があるのは、次のような理由からだ:

  • プロキシは、セキュリティを向上させ、ウェブサイトのインターネットトラフィックのバランスをとるために使用されます。
  • ウェブスクレイパーは、プロキシを使用して身元を隠し、トラフィックを一般ユーザーのトラフィックのように見せる必要がある。
  • プロキシはまた、ウェブユーザーの個人データを保護するためにも使用される。
  • プロキシは、国の検閲機構によってブロックされているウェブサイトにアクセスするのに役立つ。
  • プロキシを使えば、信頼性の高い方法でウェブサイトをクロールできる。 
  • プロキシは、オンライン小売業者から製品データをスクレイピングする必要がある場合に重宝します。特定の地域からのリクエストを可能にし、ウェブサイトがその地域に表示する特定のコンテンツにアクセスできるからです。
  • プロキシを使えば、禁止されることなく、対象のウェブサイトに大量のリクエストを行うことができる。
  • プロキシを使えば、同じウェブサイトや異なるウェブサイトへの同時接続を無制限に行うことができる。

結論

ウェブスクレイピングは、以下のような用途に使えるので重要である:

  • 製品/サービスの広告をスクレイピングし、予算に関するインサイトを作成する。
  • 競争力を維持するためのファッショントレンド予測
  • ソーシャルメディア・チャンネルをスクレイピングし、潜在顧客を発見する。

さらに、PythonでJavascriptでフィーチャーされたウェブサイトをスクレイピングするためにSeleniumを使用する方法について説明した。Youtubeのような動的なウェブサイトだけでなく、静的なウェブサイトのコンテンツをスクレイピングすることもできます。また、自動テストのためにSeleniumプロキシを使用する必要があります。住宅用 プロキシは超高速で、他のプロキシと違って簡単に検出されないので、使用できる最高のプロキシです。

Pythonを使ってJavascriptのWebサイトをスクレイピングする方法を理解していただけたでしょうか。