🐍
PythonとBeautifulSoupで作る、基本のWebスクレイピング実践ガイド
はじめに
Webサイトから特定の情報を自動で収集する「Webスクレイピング」。APIが提供されていないサイトの情報を取得したい場合などに非常に強力な技術です。
この記事では、自身の書き溜めていたメモを元に、Pythonの定番ライブラリであるrequests
とBeautifulSoup
を使った、最も基本的なWebスクレイピングの手順を解説します。
必要なライブラリ
まずは、必要なライブラリをインストールします。
pip install requests beautifulsoup4
- requests: HTTPリクエストを簡単に送信するためのライブラリ
- BeautifulSoup4: HTMLやXMLファイルからデータを抽出するためのライブラリ
スクレイピングの3ステップ
スクレイピングの基本的な流れは、以下の3ステップです。
-
requests
で対象のHTMLを取得する -
BeautifulSoup
でHTMLを解析する - 目的のデータをCSSセレクタやHTMLタグで抽出する
Step 1: HTMLの取得
requests.get()
メソッドを使って、指定したURLのHTMLコンテンツを取得します。
import requests
# 対象のURL
url = '[https://example.com](https://example.com)'
# HTTP GETリクエストを送信
response = requests.get(url)
# 文字化けを防ぐために文字コードを指定
response.encoding = response.apparent_encoding
# HTMLコンテンツを取得
html_content = response.text
print(html_content)
Step 2 & 3: HTMLの解析とデータ抽出
取得したHTMLをBeautifulSoup
に渡し、解析可能なオブジェクトを生成します。その後、CSSセレクタを使って目的のデータを抽出します。
今回はexample.com
のh1
タグとp
タグのテキストを取得してみましょう。
from bs4 import BeautifulSoup
# BeautifulSoupオブジェクトを作成
# 第2引数にはパーサー(解析器)を指定
soup = BeautifulSoup(html_content, 'html.parser')
# h1タグを検索してテキストを取得
h1_text = soup.find('h1').text
print(f"H1: {h1_text}")
# pタグを検索してテキストを取得
p_text = soup.find('p').text
print(f"P: {p_text}")
実行結果:
H1: Example Domain
P: This domain is for use in illustrative examples in documents. You may use this domain in literature without prior coordination or asking for permission.
soup.find()
は最初に見つかった1つの要素を、soup.find_all()
は条件に一致する全ての要素をリストとして返します。
まとめ
requests
とBeautifulSoup
を組み合わせることで、基本的なWebスクレイピングは非常にシンプルに実装できます。
ただし、スクレイピングを行う際は、対象サイトの利用規約を必ず確認し、サーバーに過度な負荷をかけないようにtime.sleep()
で間隔をあけるなどの配慮を忘れないようにしましょう。
この記事で紹介した内容以外にも、技術情報をブログで発信しています。
MyNote
Discussion