コラム

Pythonでウェブスクレイピング!BeautifulSoup入門

ウェブサイトから情報を抽出したいと思ったことはありませんか?ニュース記事のタイトルを一覧にしたり、商品の価格を比較したり…。そんな時に役立つのが「ウェブスクレイピング」です。Pythonには、ウェブスクレイピングを簡単に行える便利なライブラリがたくさんありますが、今回はその中でも特に初心者におすすめの「BeautifulSoup」についてご紹介します。

BeautifulSoupって何?

BeautifulSoupは、HTMLやXML形式のドキュメントを解析するためのPythonライブラリです。複雑なウェブページの構造を解析し、特定の情報を効率的に抽出することができます。BeautifulSoupを使うことで、ウェブページのソースコードを文字列として扱うよりも、ずっと簡単に目的のデータにアクセスできるようになります。

例えるなら、ウェブページのソースコードがぐちゃぐちゃに積み上げられたブロックだとすると、BeautifulSoupはそのブロックを整理整頓し、探しているブロック(情報)を簡単に見つけ出せるようにしてくれる、そんな魔法のツールです。

BeautifulSoupを使うための準備

BeautifulSoupを使うには、まずインストールが必要です。ターミナルやコマンドプロンプトで以下のコマンドを実行してください。

pip install beautifulsoup4

BeautifulSoup単体では動作しません。HTMLやXMLを解析するために、パーサーと呼ばれるものが必要です。Pythonに標準で付属しているhtml.parserを使うこともできますが、より高速で柔軟なlxmlhtml5libといったパーサーもおすすめです。

pip install lxml  # または pip install html5lib

BeautifulSoupの基本的な使い方

それでは、実際にBeautifulSoupを使ってウェブページを解析してみましょう。

まずは、解析したいウェブページのHTMLを取得します。今回は、簡単なサンプルHTMLを文字列として用意します。

html_doc = """
<html><head><title>BeautifulSoup入門</title></head>
<body>
  <h1>ウェブスクレイピングを始めよう</h1>
  <p class="description">BeautifulSoupは使いやすいライブラリです。</p>
  <a href="https://example.com">もっと詳しく</a>
</body></html>
"""

次に、BeautifulSoupオブジェクトを作成します。この際に、使用するパーサーを指定します。

from bs4 import BeautifulSoup

soup = BeautifulSoup(html_doc, 'html.parser') # または 'lxml', 'html5lib'

soupは、解析されたHTMLドキュメント全体を表すオブジェクトです。ここから様々な方法で情報を抽出できます。

情報抽出の基本

1. タグ名で要素を取得する

最も基本的な方法は、タグ名を指定して要素を取得することです。

title_tag = soup.title
print(title_tag) # <title>BeautifulSoup入門</title>
print(title_tag.text) # BeautifulSoup入門

soup.titleのように、タグ名を属性としてアクセスすると、最初に見つかったそのタグの要素が返されます。.textを使うと、タグの中身のテキストを取得できます。

2. find()とfind_all()を使う

特定の条件に合致する要素を探すには、find()find_all()が便利です。

h1_tag = soup.find('h1')
print(h1_tag) # <h1>ウェブスクレイピングを始めよう</h1>

p_tag = soup.find('p', class_='description') # class属性がdescriptionのpタグ
print(p_tag) # <p class="description">BeautifulSoupは使いやすいライブラリです。</p>
print(p_tag.text) # BeautifulSoupは使いやすいライブラリです。

a_tags = soup.find_all('a')
for a_tag in a_tags:
    print(a_tag['href']) # https://example.com

find()find_all()では、タグ名だけでなく、属性を使って検索することもできます。例えば、class_='description'は、class属性がdescriptionである要素を探します。複数の属性を指定することも可能です。

3. CSSセレクタを使う

CSSセレクタを使って要素を検索することもできます。これは、ウェブ開発の知識がある方には馴染み深いかもしれません。

h1_tag = soup.select_one('h1') # 最初に見つかったh1タグ
print(h1_tag.text) # ウェブスクレイピングを始めよう

p_tags = soup.select('p.description') # classがdescriptionのpタグ
for p_tag in p_tags:
    print(p_tag.text) # BeautifulSoupは使いやすいライブラリです。

select_one()は最初に見つかった要素を返し、select()は条件に合致する全ての要素をリストとして返します。

まとめ

BeautifulSoupは、ウェブスクレイピングを始めるための強力なツールです。今回紹介したのはほんの基本的な使い方ですが、これだけでも多くのウェブページから必要な情報を抽出できるようになります。

さらに深く学ぶためには、BeautifulSoupの公式ドキュメント(https://www.crummy.com/software/BeautifulSoup/bs4/doc/)を参照することをおすすめします。

ウェブスクレイピングを行う際には、ウェブサイトの利用規約を遵守し、過度なアクセスは避けるようにしましょう。倫理的な利用を心がけて、ウェブスクレイピングを楽しみましょう!



< seaborn
tkinter >



コラム一覧

if文
for文
関数
配列
文字列
正規表現
ファイル入出力
openpyxl
Numpy
Matplotlib
Pandas
scikit-learn
seaborn
beautifulsoup
tkinter
OpenCV
pygame
メイン関数
自作ライブラリ
画像処理
機械学習
スクレイピング
データ分析
グラフ作成
API
可読性
デバッグ
例外処理
コメント
組み込み関数
flask
学び方
ビット演算
マルチスレッドプログラミング
参照渡し
pyenv
エディタ
生成AI
画像認識
Streamlit
lambda式
物理演算シミュレーション
命名規則
遺伝的アルゴリズム
関数型プログラミング
オブジェクト指向
ツリー図