【Seleniumでサクッとウェブスクレイピング】自動化でデータ取得を簡単に!サンプルコード付き!

※関数の書き方・実行結果に誤りがあるケースがあります。随時修正中です。また誤りに気づかれた方はこちらからご連絡頂きますとめちゃ嬉しいです。

目次

みんな、集まってや!

今日はな、Pythonの中でも特に便利なライブラリ「Selenium」についてお話しするで!Seleniumっていうのは、ウェブブラウザを自動で操作できるツールやねん。これを使えば、毎回手動でクリックしたり入力したりせんでも、自動でやってくれるから、めっちゃ楽になるで!

例えば、毎朝のニュースサイトをチェックするのに、いちいちブラウザ開いてスクロールしたり、記事をクリックしたりするのがめんどくさいやろ?Seleniumを使ったら、プログラムにその作業を任せられるから、コーヒーでも飲みながら待ってるだけでええんや。これからの世の中、時間を有効に使うことが大事やから、Seleniumを使いこなせると、ほんまに便利になるで!

さあ、早速その使い方を見ていこうか!

Seleniumの概要とWebDriverの設定

まずは、Seleniumがどんなもんかを簡単に説明するで。Seleniumは、ウェブブラウザを自動で操作するためのライブラリや。これを使うことで、ウェブサイトにアクセスして、クリックしたり、テキストを入力したりできるんや。ほんまに便利やで!

次に、WebDriverの設定やけど、これがSeleniumの心臓部分や。WebDriverは、Seleniumがブラウザを操作するためのインターフェースやねん。これを使うことで、ChromeやFirefoxなど、いろんなブラウザにアクセスできるようになるんや。

まず、必要なライブラリをインストールして、WebDriverをセットアップする手順を見てみよう!以下のコードをColabに入力してな。

!pip install selenium

次に、Chromeブラウザを使う場合、ChromeDriverをダウンロードして、Colabにアップロードする必要があるんや。以下のコードを使って、アップロードしたら、WebDriverを設定しよう!

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager

# ChromeDriverのセットアップ
service = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service)

これで、SeleniumとWebDriverの設定が完了や!次は、このセットアップを使って、ウェブページを操作する方法を見ていこうか。楽しみやな!

ウェブページの操作(クリック、入力)

さて、次は実際にウェブページを操作する方法についてや。Seleniumを使うと、ウェブページにアクセスして、要素をクリックしたり、テキストを入力したりできるんやで。これがめっちゃ楽しいところやな!

まずは、指定したウェブページにアクセスする方法を見てみよう。例えば、Googleの検索ページにアクセスするコードはこんな感じや。

# Googleの検索ページにアクセス
driver.get("https://www.google.com")

このコードを実行したら、ブラウザが自動でGoogleのページを開いてくれるで。

次に、検索ボックスにテキストを入力して、検索ボタンをクリックする方法を紹介するわ。まずは、検索ボックスの要素を探して、テキストを入力してみよう。

# 検索ボックスを探して、テキストを入力
search_box = driver.find_element("name", "q")
search_box.send_keys("Python")

# 検索ボタンをクリック
search_box.submit()

このコードを実行したら、”Python”というキーワードで検索をしてくれるで。find_element()メソッドを使って、ウェブページ内の要素を探しているんや。ここで使った"name"は、要素の属性を指定するもので、"q"はGoogleの検索ボックスの名前や。

これで、基本的なクリックと入力の操作はバッチリや!次は、要素の待機や動的コンテンツの処理について学んでいこうか。楽しみやな!

要素の待機と動的コンテンツの処理

次は、ウェブページの要素が表示されるのを待つ方法についてや。ウェブページは、時々要素がすぐに表示されへんことがあるから、Seleniumでは「待機」を使うんや。これを使うことで、要素が準備できるまで待つことができるで。

まずは、「明示的待機」を使ってみよう。これは、特定の条件が満たされるまで待つ方法や。たとえば、特定のボタンが表示されるまで待つコードはこんな感じや。

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 明示的待機の設定
wait = WebDriverWait(driver, 10)  # 最大10秒待つ

# ボタンがクリック可能になるまで待つ
button = wait.until(EC.element_to_be_clickable((By.NAME, "btnK")))
button.click()

このコードでは、ボタンがクリック可能になるまで最大10秒待つようにしてるんや。EC.element_to_be_clickable()を使って、ボタンがクリックできる状態になるのを待ってるんやで。

次に、動的コンテンツについてや。ウェブページがJavaScriptで内容を動的に変更することがあるから、要素が表示されたり非表示になったりすることがあるんや。これも待機を使って、要素が表示されるのを待つことができるで。

例えば、特定の要素が表示されるまで待つ場合は、次のようにコードを書くことができるんや。

# 要素が表示されるまで待つ
dynamic_element = wait.until(EC.visibility_of_element_located((By.ID, "dynamicContent")))

これで、動的に生成される要素も安心して扱えるようになるで!要素の待機ができると、Seleniumを使った操作がもっとスムーズになるから、覚えておいてな。

次は、スクリーンショットの取得について学んでいこう!楽しみやな!

スクリーンショットの取得

さあ、次はウェブページのスクリーンショットを取得する方法についてや!Seleniumを使うと、ブラウザで表示されている内容をそのまま画像として保存することができるんや。これ、めっちゃ便利やで!

スクリーンショットを取得するには、get_screenshot_as_file()メソッドを使うんや。これを使って、指定したファイル名で画像を保存することができるで。実際にやってみようか!

以下のコードを使って、現在表示されているページのスクリーンショットを取得してみよう。

# スクリーンショットを取得して保存
driver.get_screenshot_as_file("screenshot.png")

このコードを実行したら、現在のウェブページのスクリーンショットが「screenshot.png」というファイル名で保存されるんや。Colab環境やったら、このファイルをダウンロードすることもできるで。

また、スクリーンショットを取得する際に、get_screenshot_as_base64()メソッドを使って、画像をBase64形式で取得することもできるんや。これを使うと、画像を直接表示したり、他の処理に使ったりすることも可能やで。

# スクリーンショットをBase64形式で取得
screenshot_base64 = driver.get_screenshot_as_base64()

このように、スクリーンショットを取得する方法はいろいろあるから、用途に応じて使い分けてな!

次は、ウェブスクレイピングの実行について学んでいこう!これもめっちゃ面白いで!楽しみやな!

簡単なウェブスクレイピングの実行

さあ、最後にウェブスクレイピングについて学んでいこう!ウェブスクレイピングを使うと、ウェブページからデータを抽出することができるんや。Seleniumを使えば、動的なコンテンツからもデータを簡単に取得できるで。

まずは、ウェブページにアクセスして、必要なデータを取得する流れを見てみよう。たとえば、あるニュースサイトから最新の見出しを取得するコードを書いてみるわ。

以下のように、特定の要素を探してテキストを取得することができるんや。

# ニュースサイトにアクセス
driver.get("https://example-news-website.com")

# 最新の見出しを取得
headlines = driver.find_elements("class name", "headline")

for headline in headlines:
    print(headline.text)

このコードでは、ニュースサイトにアクセスして、クラス名が「headline」の要素をすべて取得しているんや。find_elements()メソッドを使うことで、複数の要素を一度に取得できるで。取得した要素のテキストをheadline.textで表示することができるんや。

もし、特定の要素が動的に生成される場合は、先ほど学んだ「明示的待機」を使って、要素が表示されるのを待つことも大切やで。

さらに、取得したデータをCSVファイルに保存することもできるんや。例えば、取得した見出しをCSVファイルに書き込むコードは以下のようになるで。

import csv

# CSVファイルに書き込む
with open("headlines.csv", mode="w", newline="") as file:
    writer = csv.writer(file)
    writer.writerow(["Headline"])  # ヘッダーを書き込む

    for headline in headlines:
        writer.writerow([headline.text])  # 見出しを書き込む

これで、取得した見出しをCSVファイルに保存できるで。データを扱う上で、非常に便利な技術やな!

これで、Seleniumを使った基本的なウェブスクレイピングの方法はバッチリや!実際にいろんなサイトを使ってデータを取得してみてな。楽しみながら学んでいこう!お疲れさんやで!

【Seleniumでサクッとウェブスクレイピング】自動化でデータ取得を簡単に!サンプルコード付き!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次