PythonとSeleniumを使ってWebページからHTMLを取得、スクレイピングする方法

スポンサーリンク

この記事では、任意のWebサイトからデータを取得するために、Seleniumを使用してWebスクレイパーを作成します。

Seleniumはブラウザを自動化するために使用されるオープンソースプロジェクトです。

自動化のための幅広いツールやライブラリを提供しています。

ブラウザを自動化するためのスクリプトは、java, python, c#, Kotlinなど、様々な言語で書くことができます。

スポンサーリンク

データを取得するための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行で表示すると、次のようになります。

Inspect Element In Webpage

このような出力が得られます。

Scraped Web Data Output

まとめ

以上、SeleniumとPythonを使ってほぼすべてのWebサイトからWebサイトのデータをスクレイピングする方法でした。

正しいXPathを見つけ、Webサイトが使用しているパターンを特定できる限り、任意のWebサイト上のすべてのデータにアクセスすることは本当に簡単になります。

同じことを試してみて、私たちに教えてください。

このチュートリアルを楽しんでいただければ幸いです。

Python.comをフォローして、もっと面白いチュートリアルを見つけてください。

タイトルとURLをコピーしました