【業務自動化】チャプター4-3:動的ページをスクレイピングしよう

一つ前のページでは 静的ページのスクレイピング について学習しました。
今回は 動的ページのスクレイピング について見ていきましょう。
Chapter1:PythonでExcelを操作しよう
Chapter2:PyInstallerで自動化ツールを(.exe)作ろう
Chapter3:便利な自動化ツールを5つ作ろう
Chapter4:Webスクレイピング入門
・Chapter4-1:Webスクレイピングとは何か
・Chapter4-2:静的ページをスクレイピングしよう
・Chapter4-3:動的ページをスクレイピングしよう ◁今回はここ
Chapter5:自動化ツールを作って稼ごう
動的ページとは、JavaScriptによって表示内容が後から生成されたり、ボタン操作やスクロールで新しい情報が読み込まれたりするページのことです。
このタイプのページは、前回学習した requests や BeautifulSoup だけでは正しく情報を取得できません。
この記事では、Pythonのライブラリ Selenium を使い、実際に動的ページからニュース見出しを収集し、さらに「新しい見出しだけをExcelに追加する差分更新処理」を実装します。
最終的な目標は「動的に変化するWebページから必要なデータを効率的に収集・管理する」ことです。
本記事は前半は無料。後半は会員向けの有料記事です。
業務自動化の全ての記事セットが今だけ 2980円 ⇒ 1980円。
どこよりも安いこの教材を、是非ご活用下さい^^
- もくじ
-
青字は無料部分。白字は会員向け部分です。
- 動的ページとは|スクレイピングで注意すべきページの種類
- Seleniumとは|動的ページを自動操作して情報を取得する仕組み
- Seleniumの概要|ブラウザ自動操作・待機・要素取得の基本
- Seleniumの代表的な機能一覧
- サンプルスクリプトの紹介|取得データをopenpyxlでExcelに保存
- このコードでできること|ニュース見出し取得と重複回避・差分追加
- サンプルスクリプトの紹介
- コード解説|Seleniumの待機・要素取得とopenpyxlでのExcel 書き込み
- まとめ
どこよりも安いこの教材を、是非ご活用下さい。
動的ページとは|スクレイピングで注意すべきページの種類
Webサイトには大きく分けて「静的ページ」と「動的ページ」があります。
静的ページはサーバーから送られたHTMLがそのまま表示されるため、requestsとBeautifulSoupだけで簡単に情報を収集できます。
一方で 動的ページ は、JavaScriptによってHTMLの内容が後から書き換えられたり、ユーザー操作によって新しい情報が読み込まれたりする仕組みを持っています。
例えば、ニュースサイトで「もっと見る」をクリックすると記事一覧が追加表示される場合や、株価・天気のようにページを開いた後に情報が更新されるケースが典型です。
このようなページでは、ソースコードを直接取得しても必要な情報が含まれていないことが多く、Seleniumのようにブラウザを自動操作できるツール を利用する必要があります。


Seleniumとは|動的ページを自動操作して情報を取得する仕組み
Selenium(セレニウム) は、Pythonをはじめ多くのプログラミング言語で利用できる「ブラウザ自動操作ライブラリ」です。
Seleniumの概要|ブラウザ自動操作・待機・要素取得の基本
通常のスクレイピングではrequestsでHTMLを取得し、BeautifulSoupで解析しますが、動的ページではJavaScriptによって後から生成される要素があるため、それだけでは情報を取り出せません。
Seleniumは実際のブラウザ(ChromeやEdgeなど)をプログラムで操作し、人間がブラウザで見ているのと同じ状態のページ を取得できるのが大きな特徴です。
Seleniumを使うと次のようなことが可能になります。
- JavaScriptで生成された情報を含めて取得できる
- ボタンのクリックやスクロールなどの操作を自動化できる
- ログインが必要なページで、フォーム入力やログイン処理を再現できる
このようにSeleniumは「人間の操作をそのままPythonに任せる」イメージで使えるため、動的ページのスクレイピングでは必須のツールとなります。
Seleniumの代表的な機能一覧
Seleniumを使うときによく利用するクラスや関数を整理しておきましょう。
これらを押さえておくと、動的ページのスクレイピングがスムーズに進みます。
| クラス / 関数 | 説明 |
|---|---|
webdriver.Chrome(options=...) | Chromeブラウザを起動する。options を指定することで「画面を表示しない(ヘッドレスモード)」などの設定が可能。 |
driver.get(url) | 指定したURLにアクセスする。 |
driver.implicitly_wait(seconds) | ページ内の要素が出てくるまで最大で指定秒数待機する。 動的ページの読み込みに便利。 |
driver.find_element(By.XXX, "値") | ページ内から最初に一致する要素を取得。By.ID や By.TAG_NAME などを指定できる。 |
driver.find_elements(By.XXX, "値") | 条件に合うすべての要素をリストで取得。 ニュース記事のリンク一覧などを収集する場合に利用。 |
element.text | 取得した要素からテキストを取り出す。 |
element.get_attribute("href") | 要素の属性値(例:リンク先URL)を取得する。 |
driver.quit() | ブラウザを閉じる。処理終了時には必ず呼び出す。 |
これらの基本操作を組み合わせることで、「ページを開く → 要素を探す → 情報を取り出す → 結果を保存する」という流れを自動化できます。
サンプルスクリプトの紹介|取得データをopenpyxlでExcelに保存
ここからは、実際に動的ページを対象にしたサンプルスクリプトを紹介します。
今回の例では、ニュースサイト(Yahoo!ニュース)を対象に、Seleniumを使って最新の見出しを収集し、Excelに保存する仕組みを作ります。
このスクリプトでは、前回の静的ページ版に加えて 差分更新機能 を取り入れており、既に保存済みの見出しと照合して新しい記事だけを追加保存できるようになっています。
このコードでできること|ニュース見出し取得と重複回避・差分追加
サンプルスクリプトを実行すると、次のような処理が自動的に行われます。
- 動的ページにアクセス
SeleniumでChromeブラウザを起動し、ニュースサイトのトップページにアクセスします。 - JavaScriptで生成された要素を含めて取得
ページ読み込みを待機し、ニュース見出しのリンクやテキストを抽出します。 - 差分チェック
既にExcelに保存されている記事タイトルと比較し、新しいものだけをリストアップします。 - Excelに保存
openpyxlを使って新しい記事をExcelに追加します。 - 通知
追加された件数をポップアップで知らせ、保存先も表示します。
このように「動的に変化するページ」からでも効率的に情報を収集でき、さらに差分更新で重複を防げるのがポイントです。
すでに購入済みの方はこちら


