【Python】第9章第1回:Webスクレイピング(BeautifulSoupとrequests)
本記事では、Pythonの代表的なWebスクレイピングツールであるBeautifulSoupとrequestsの基本的な使い方を学びます。簡単なスクレイピングスクリプトを通じて、データ収集のスキルを身につけましょう。
0. 記事の概要
この記事を読むメリット
- Webスクレイピングの基礎を理解:データ収集の基本を学べます。
- BeautifulSoupとrequestsの使い方を習得:Pythonでの効率的なスクレイピングが可能になります。
- 実践スキルの向上:実際のWebサイトからのデータ取得を試すことができます。
この記事で学べること
- Webスクレイピングの基本概念と用途
- BeautifulSoupとrequestsのインストールと基本的な使い方
- 簡単なスクレイピングスクリプトの実装
1. Webスクレイピングの基本とは?
1.1 Webスクレイピングの定義
Webスクレイピングとは、Webページから自動的にデータを収集する技術です。スクレイピングは、以下の用途で利用されます。
- 価格情報の収集: 電子商取引サイトの価格比較。
- ニュースの集約: ニュースサイトからの記事取得。
- リサーチデータの収集: 公開データの自動取得。
1.2 スクレイピングの注意点
スクレイピングを行う際は、対象サイトの利用規約を確認し、禁止されていないことを確認してください。また、アクセス頻度を制御し、サーバーへの負荷を軽減するよう努めましょう。
2. BeautifulSoupとrequestsを使った基本的なスクレイピング
2.1 必要なライブラリのインストール
スクレイピングには、以下のライブラリを使用します。
# 必要なライブラリのインストール
pip install beautifulsoup4 requests
2.2 簡単なスクレイピングスクリプト
# サンプルスクリプト
import requests
from bs4 import BeautifulSoup
# URLを指定
url = "https://example.com"
response = requests.get(url)
# HTMLを解析
soup = BeautifulSoup(response.text, "html.parser")
# タイトル要素を取得
title = soup.find("title").text
print(f"ページタイトル: {title}")
動作解説
- requests: 指定したURLからHTMLを取得。
- BeautifulSoup: HTMLを解析し、特定の要素を抽出。
- find: タイトル要素を取得し、テキストとして表示。
3. 実践例:ニュースサイトの見出しを取得
3.1 サンプルコード
# ニュースサイトの見出しを取得
url = "https://example-news.com"
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")
# 見出しを全て取得
headlines = soup.find_all("h2")
for headline in headlines:
print(headline.text)
動作解説
- find_all: HTML内の全ての要素をリストとして取得。
- forループ: 各見出しを順に出力。
4. 練習問題
以下の課題に挑戦してみましょう。
- 特定のクラス名を持つ要素を取得するスクリプトを作成してください。
- 画像URLを全て取得し、ファイルに保存するスクリプトを作成してください。
- 対象サイトの利用規約ページから重要なパラグラフを抽出してください。
5. 練習問題の解答と解説
問2の解答例
# 画像URLを取得してファイルに保存
url = "https://example.com"
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")
# 画像URLを取得
images = soup.find_all("img")
with open("images.txt", "w") as file:
for img in images:
file.write(img["src"] + "\\n")
6. まとめ
本記事では、BeautifulSoupとrequestsを使用した基本的なWebスクレイピング方法を学びました。実際に手を動かして、スクレイピングの基礎を習得してください。