この記事では、任意のWebサイトからデータを取得するために、Seleniumを使用してWebスクレイパーを作成します。
Seleniumはブラウザを自動化するために使用されるオープンソースプロジェクトです。
自動化のための幅広いツールやライブラリを提供しています。
ブラウザを自動化するためのスクリプトは、java, python, c#, Kotlinなど、様々な言語で書くことができます。
この記事もチェック:PythoのSeleniumを使用して要素を取得する色々な方法を解説する
データを取得するためのWebスクレイパーの実装
この例では、IMDBから最も人気のある映画のリストを取得することで、PythonのWebスクレイピングを実証します。
ステップ1 モジュールのインポート
ウェブスクラッパーを始めるために、Selenium と関連するモジュールをインポートします。
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
|
ステップ2.WebDriver の初期化
ブラウザを自動化するために、使用する予定のWebブラウザのWebDriverをダウンロードする必要があります。
今回は、Google Chromeを使用しているので、chromeのWebDriverをダウンロードしました。
ChromeのバージョンとWebDriverのバージョンが同じであることを確認してください。
Chromeのメソッドでは、以下のようにWebDriverのパスを渡す必要があります。
driver = webdriver.Chrome( 'C://software/chromedriver.exe' )
|
ステップ3.Pythonでウェブサイトにアクセスする
ウェブサイトのデータにアクセスするために、スクレイピングするウェブサイトのURLを開く必要があります。
これを行うには、getメソッドを使用し、メソッドのパラメータとしてウェブサイトのURLを渡します。
この例では、IMDBの最も人気のある映画のWebページです。
driver.get( "https://www.imdb.com/chart/moviemeter/?ref_=nv_mv_mpm" )
|
このコードを実行すると、渡されたアドレス(URL)のウェブサイトを持つコンピュータシステムのウェブブラウザが開きます。
ステップ4.スクラップする特定の情報を見つける
この例では、IMDB からトップレートの映画名を探しているので、HTML 要素の XPath を見つけることにします。
XPath は、HTML ドキュメント内の特定のイベント(オブジェクト)へのパスの位置と理解することができ、ウェブページ上の要素や場所を見つけるために使用されます。
ある要素のXPathを取得するには、ブラウザのInspectツールを開き、セレクタツールを使って(パスを取得する必要のある)特定のツールを選択し、HTMLコード上で右クリックし、Copy XPathを選択します。
<td class="titleColumn"> <a href="" title="Chloé Zhao (dir.), Gemma Chan, Richard Madden">Eternals</a>
</td> |
この例では、ムービーの名前要素を調べた結果、すべての名前が titleColumn というクラスに入っていることがわかりましたので、これを xpath としてコードに渡せば、ムービーの名前にアクセスすることができます。
movies = driver.find_elements_by_xpath( '//td[@class="titleColumn"]' )
|
メソッド find_elements﹑xpath() を使用して、すべての titleColumn クラスを検索します。
movies_list = []
for p in range ( len (movies)):
movies_list.append(movies[p].text)
|
注:すべてのxpathはダブルスラッシュに先行されます。
ステップ5.Pythonのリストにデータを格納する
さて、目的の情報をうまく取得できたので、後のコードで検索・処理するために、変数やデータ構造に格納する必要があります。
スクレイピングしたデータは、配列、リスト、タプル、辞書など、さまざまなデータ構造に格納することができます。
ここでは、スクレイピングしたデータ(トップクラスの映画名)をリストに格納することにします。
そのためには、すべての映画名を反復してリストに格納するループを書けばよい。
movies_listは、ウェブサイトから取得したすべての情報を含む空のリストです。
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome( 'C://software/chromedriver.exe' )
driver.get( 'https://www.imdb.com/chart/moviemeter/?ref_=nv_mv_mpm' )
movies = driver.find_elements_by_xpath( '//td[@class="titleColumn"]' )
movies_list = []
for p in range ( len (movies)):
movies_list.append(movies[p].text)
|
WebサイトのデータをWebスクレイピングするための最終的なPythonコードは次のとおりです。
print ( * movies_list, sep = " )
|
movies_listのリストを1行で表示すると、次のようになります。
このような出力が得られます。
まとめ
以上、SeleniumとPythonを使ってほぼすべてのWebサイトからWebサイトのデータをスクレイピングする方法でした。
正しいXPathを見つけ、Webサイトが使用しているパターンを特定できる限り、任意のWebサイト上のすべてのデータにアクセスすることは本当に簡単になります。
同じことを試してみて、私たちに教えてください。
このチュートリアルを楽しんでいただければ幸いです。
Python.comをフォローして、もっと面白いチュートリアルを見つけてください。