【Pythonコラム】Pythonでウェブスクレイピング!BeautifulSoup入門




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()が便利です。

  • 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 >

レッスン概要

◯月額4,000円で質問し放題!!
◯完全オンライン
◯翌日までには必ず返信
◯挫折しない独自の学習メソッド
◯圧倒的高評価!!
◯テキストベースで時間を選ばない
◯高品質なサンプルコード
詳細はこちら
興味がある方はまず質問だけでもどうぞ!