ウェブスクレイピングは、ウェブページから必要な情報を自動的に取得する技術です。
Pythonでスクレイピングを行う際には、多くの場合seleniumというライブラリが使用されます。
この記事では、seleniumを使って指定したウェブページのHTMLをダウンロードし、ローカルに保存する方法を具体的なコード例とともに解説します。
- Pythonライブラリseleniumの概要
- seleniumのインストール方法
- seleniumを使ってHTMLファイルを自動でダウンロードするPythonコード
Seleniumとは
Seleniumは、ウェブアプリケーションのテストを自動化するフレームワークで、Selenium WebDriverを使ってプログラムからブラウザを制御します。
多くのプログラム言語とブラウザに対応し、ウェブページの要素を操作やユーザーアクションのシミュレーションが可能です。また、ウェブスクレイピングにも利用され、ウェブページからデータを効率的に抽出する作業を支援します。
ライブラリのインストール
seleniumをインストールしていない場合は、以下のコマンドでインストールしてください。
pip install selenium
作成したPythonコード
このPythonプログラムは、seleniumライブラリを使用して指定したURLのウェブページにアクセスし、そのHTMLをダウンロードします。
ダウンロードしたHTMLは指定したディレクトリに保存されます。
プログラムはまず保存先ディレクトリの存在を確認し、なければ作成します。その後、ウェブページにアクセスしてHTMLを取得し、ファイルとして保存。最後にWebDriverを閉じてリソースを解放します。
コード解説
- 変数の設定: 対象となるURL(
target_url
)とHTMLの保存先ディレクトリ(save_directory
)を変数で設定します。 - ディレクトリの確認と作成:
os.path.exists
とos.makedirs
を使用して、保存先ディレクトリが存在するか確認し、存在しない場合は作成します。 - WebDriverのインスタンス作成:
webdriver.Chrome()
を用いてGoogle ChromeのWebDriverインスタンスを作成します。 - ウェブページへのアクセス:
driver.get()
メソッドで指定したURLにアクセスします。 - ページロードの待機:
time.sleep()
を用いて、ページが完全にロードされるまで一定時間(秒)待機します。 - HTMLの取得:
driver.page_source
を用いて、アクセスしたウェブページのHTMLを取得します。 - HTMLの保存:
open()
とwrite()
を用いて、取得したHTMLを指定したディレクトリにファイルとして保存します。 - WebDriverの終了:
driver.quit()
を用いて、開いたWebDriverを閉じてリソースを解放します。
作成した全体のソースコード
from selenium import webdriver
import time
import os
# 対象となるURL
target_url = 'https://www.example.com'
# 保存先のディレクトリパス
save_directory = './saved_html/'
# ディレクトリが存在しない場合は作成
if not os.path.exists(save_directory):
os.makedirs(save_directory)
# WebDriverのインスタンスを作成(Google Chromeを使用)
driver = webdriver.Chrome(executable_path='path/to/chromedriver')
# 指定したURLにアクセス
driver.get(target_url)
# ページが完全にロードされるまで少し待つ(必要に応じて)
time.sleep(2)
# ページのHTMLを取得
page_source = driver.page_source
# HTMLをファイルに保存
save_path = os.path.join(save_directory, 'page_source.html')
with open(save_path, 'w', encoding='utf-8') as f:
f.write(page_source)
# WebDriverを閉じる
driver.quit()
実行結果
今回は動作確認のため、当ブログの以下の記事を対象にスクレイピングを行います。
先ほどのコードを実行すると、ブラウザが起動され、以下のようにHTMLファイルがダウンロードされます。
DevTools listening on ws://127.0.0.1:57100/devtools/browser/f2450d3b-6a07-4f8b-9e8e-6460b222ec51
[14780:15844:1014/203924.471:ERROR:page_load_metrics_update_dispatcher.cc(178)] Invalid first_paint (unset) for first_image_paint 1.185 s
[14780:15844:1014/203924.508:ERROR:page_load_metrics_update_dispatcher.cc(178)] Invalid first_paint 1.263 s for first_image_paint 1.185 s
[14780:15844:1014/203924.632:ERROR:page_load_metrics_update_dispatcher.cc(178)] Invalid first_paint 1.263 s for first_image_paint 1.185 s
[14780:15844:1014/203924.798:ERROR:page_load_metrics_update_dispatcher.cc(178)] Invalid first_paint 1.263 s for first_image_paint 1.185 s
[14780:15844:1014/203925.019:ERROR:page_load_metrics_update_dispatcher.cc(178)] Invalid first_paint 1.263 s for first_image_paint 1.185 s
[14780:15844:1014/203925.252:ERROR:page_load_metrics_update_dispatcher.cc(178)] Invalid first_paint 1.263 s for first_image_paint 1.185 s
[14780:15844:1014/203925.513:ERROR:page_load_metrics_update_dispatcher.cc(178)] Invalid first_paint 1.263 s for first_image_paint 1.185 s
[14780:15844:1014/203925.940:ERROR:page_load_metrics_update_dispatcher.cc(178)] Invalid first_paint 1.263 s for first_image_paint 1.185 s
[14780:15844:1014/203926.346:ERROR:page_load_metrics_update_dispatcher.cc(178)] Invalid first_paint 1.263 s for first_image_paint 1.185 s
[14780:15844:1014/203926.612:ERROR:page_load_metrics_update_dispatcher.cc(178)] Invalid first_paint 1.263 s for first_image_paint 1.185 s
指定したディレクトリを見ると、ダウンロードされたHTMLファイルが見つかります。
HTMLファイルをブラウザで開くと、以下のようにダウンロードされたページを見ることができました。
まとめ
この記事では、Pythonのseleniumライブラリを使用して、指定したURLのウェブページからHTMLをダウンロードし、ローカルのディレクトリに保存する方法を学びました。
この基本的なスキルをマスターすることで、さまざまなウェブスクレイピングのタスクに応用することが可能です。ぜひ、この知識を活用して、効率的なデータ収集を行ってください。
それでは、また次の記事でお会いしましょう。
コメント