coiai Logo

Selenium, BeautifulSoup スクレイピング入門

これは何?


SeleniumとBeautifulSoupを使用して、一般的なWebスクレイピングを行う基本的な流れについての技術メモです。

環境

  • Apple Silicon M1 MacBook Air
  • 16 Gb
  • macOS Sequoia 15.0
  • chromedriver version : ChromeDriver 129.0.6668.58
  • Google Chrome version : 129.0.6668.59(Official Build) (arm64)
  • 2024/09/18 現在の実行

手順

ディレクトリの作成と仮想環境の作成

mkdir ScrapingTest
cd ScrapingTest
python -m venv nenv

ライブラリのインストール

  • Selenium: Webブラウザを自動操作するためのライブラリです。JavaScriptで動的に生成されるページのスクレイピングに特に有効です。
  • BeautifulSoup: WebページのHTMLを解析し、指定したデータを抽出するためのライブラリです。
pip install selenium beautifulsoup4 pandas webdriver-manager

Chromeドライバーのインストールは以下の記事を参照してください。

https://coiai.boy.jp/2361/


まず、Seleniumを使ってChromeブラウザを操作するために、ChromeDriverを設定します。webdriver_managerを使うことで、ChromeDriverを自動でインストールし、最新バージョンに対応させることができます。

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from bs4 import BeautifulSoup
import pandas as pd
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# ChromeDriverのサービス設定
service = Service(ChromeDriverManager().install())

# ChromeDriverを初期化
driver = webdriver.Chrome(service=service)

次にアクセスしたいページを追加します。今回は私のサイトにしましたが、お好きなサイトで試してください。

# ターゲットのWebページにアクセス
driver.get('https://coiai.boy.jp')


ページ全体がロードされるまで最大20秒待機します。指定された要素がロードされるのを待つことで、動的に生成されるコンテンツにも対応できます.

# ページ全体のロードを待つ (20秒まで待機)
WebDriverWait(driver, 20).until(
    EC.presence_of_element_located((By.TAG_NAME, 'body'))
)


BeautifulSoupを使って、HTMLソースを解析し、ページ内のデータを取得します。この例では、h2タグ内のデータを抽出します。

# ページのソースをBeautifulSoupで解析
soup = BeautifulSoup(driver.page_source, 'html.parser')

# h2タグのみを取得
h2_tags = soup.find_all('h2')

データをリストに格納します。

# 抽出したデータをリストに格納
test_list = []

# 各h2タグの内容をリストに追加
for h2 in h2_tags:
    test_list.append({
        'テストデータ': h2.text.strip()
    })

データをCSVに書き出すようにしました。

# データフレームに変換
df = pd.DataFrame(test_list)

# 結果を表示またはCSVに保存
df.to_csv('test_data.csv', index=False)
print(df)

最後に開いたブラウザを閉じます。

# ブラウザを閉じる
driver.quit()

まとめ

全てを踏まえると以下のコードになります。
こちらを適宜実行していただければ動作すると思います。

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from bs4 import BeautifulSoup
import pandas as pd
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# ChromeDriverのサービス設定
service = Service(ChromeDriverManager().install())

# ChromeDriverを初期化
driver = webdriver.Chrome(service=service)

# ターゲットのWebページにアクセス
driver.get('https://coiai.boy.jp')

# ページ全体のロードを待つ (20秒まで待機)
WebDriverWait(driver, 20).until(
    EC.presence_of_element_located((By.TAG_NAME, 'body'))
)

# ページのソースをBeautifulSoupで解析
soup = BeautifulSoup(driver.page_source, 'html.parser')

# h2タグのみを取得
h2_tags = soup.find_all('h2')

# 抽出したデータをリストに格納
test_list = []

# 各h2タグの内容をリストに追加
for h2 in h2_tags:
    test_list.append({
        'テストデータ': h2.text.strip()
    })

# データフレームに変換
df = pd.DataFrame(test_list)

# 結果を表示またはCSVに保存
df.to_csv('test_data.csv', index=False)
print(df)

# ブラウザを閉じる
driver.quit()

この例では、SeleniumとBeautifulSoupを使って、Webページからh2タグ内のテキストデータを抽出し、CSVに保存する方法を紹介しました。この手法を応用すれば、さまざまなWebサイトから必要なデータを自動的に取得することが可能です。

Seleniumを使うことで、動的に生成されるコンテンツにも対応できるため、より複雑なページからのスクレイピングにも対応可能です。ぜひ試してみてください。

これで、一般的なスクレイピングのやり方を解説する技術記事のベースが完成しました。必要に応じて、サンプルデータや具体的な利用ケースに合わせて調整してください。

投稿日: 2024年9月19日
カテゴリ: Python
タグ: python, スクレイピング, プログラミング
coiai

coiai

この記事もおすすめ

ポッドキャストを取った後Auditionですべきこと

ポッドキャストを取った後Auditionですべきこと

この記事はポッドキャストなどの音声コンテンツを取った後にAuditionで編集する方法について解説しています。 環境 やること 基本的に以下の4つの工程をすると、かなりクオリティアップにつながります! ノイズリダクション 無音部分を選択します。開始地点をi, 終わりをo キーを押すと選択できます。選択できたらエフェクト→ノイズリダクション/リストア→ノイズプリントをキャプチャを押します。 続いて、全体を選択します。cmd, a で全選択になります。エフェクト→ノイズリダクション/リストア→ノイズリダクションを選択します。 以下のようなパネルが表示されうので、ノイズのみをきたりして、削減ちを調整して、良い感じになったら適応ボタンを押します。 シングルバンドコンプレッサ 左のパネルのエフェクトトラックから▶️ボタンを押し、振幅と圧縮→シングルバンドコンプレッッサを選択します。 選択すると下記のようなパネルが開きます。それぞれ、 といった意味があります。設定値は下記画像のようにしています。 設定がめんどくさい場合はプリセットからラジオレベラーを選択してください。 EQ(声をクリアにする) パラメトリックイコライザーを使用します。エフェクト→フィルターとイコライザ→パラメトリックイコライザーを選択します。 私の場合は下記のように設定しています。 無音カット エフェクト→診断→無音をカットをすると左パネルに診断が表示されます。 効果を無音を削除、プリセットをポッドキャストにするとちょうどよくなると思います。設定したら、スキャンボタンを教えて、全て削除で無音がカットされます。 かなりカットされてしまうので、短いCM等に使うのはありかなという感じです。 参考 Adobe 無音カット https://helpx.adobe.com/jp/audition/using/strip-silence.html

MetaStore コンテンツ型のアプリ内課金を実装する

MetaStore コンテンツ型のアプリ内課金を実装する

MetaStoreのコンテンツ型のアプリ内課金を実装する方法についてです。 コンテンツを追加する 右上のアドオンを作成ボタンを押す。 アドオンタイプ 一度購入したら、それ以降は購入しない設定は耐久型を選びます。アプリ内のコインや石など、消耗品は消耗品を選びます。 価格設定 価格設定タブに進むとコンテンツの価格を設定できます。有料のコンテンツをまだ登録したことない場合は支払い情報の設定が住んでいないはずなので、支払い情報の設定が先に必要になります。 DUC データユーズチェックアップ 左メニューの必要条件の中のデータ使用状況の確認を開きます。 例えばIAPでユーザー認識が必要な場合は User ID, ユーザー名が必要な場合は User Profile の追加ボタンを押します。 何に使うかの用途と説明が求められるのでそこに使用用途を記述してください。 ここまで出来たらリクエストを送信ボタンを押します。 このようにデータの取り扱いについて質問されるので答えてください。英語で書いてあるので、なんとなく何が書いてあるか順番にさらっと説明します。 データの使用状況の確認 左サイドバーから必要条件⇒データ使用状況の確認をクリックします。 これが設定されていないと以下の文言のポップアップが表示されます。 読んでくださった方へ 株式会社coiaiでは、Quest向け、PCVR、Vision OS向けの開発も得意としています。新規開発ももちろん、開発途中でメンバーが必要といった場合でも請け負えますので、ご相談ください!

この記事を書いた会社

株式会社coiaiは、「想像できることを美しく実現」を掲げ、XR・Web・アプリ・システム開発およびDX支援を行う会社です。 創業2022年、東京都練馬区に本社を置き、要件のヒアリングからPoC(概念実証)、本番運用まで一貫して伴走します。 まずはお気軽にご相談ください。

商号株式会社 coiai創業2022年1月設立2025年1月23日資本金1,500,000円(設立時点)本社所在地東京都練馬区関町北 3-6-9代表者代表取締役 竹村 啓佑 / 代表取締役 服部 陽良

主なご相談内容

会社概要・役員紹介を見る

詳しい会社情報は会社概要ページでご覧いただけます。

資料請求・無料相談

導入要件のヒアリングからPoC、本番運用まで伴走します。まずはお気軽にご相談ください。

お問い合わせの前に 個人情報保護方針 をご確認ください。