【Python自動化入門③】RequestsとBeautifulSoupでWebスクレイピングに挑戦

Python自動化

【Python自動化入門③】RequestsとBeautifulSoupでWebスクレイピングに挑戦

こんにちは!「Python自動化入門」シリーズ第3回です。前回までの記事では、Pythonの基本文法やファイル操作について学んできました。今回はいよいよ「Webスクレイピング」に挑戦します。

Webスクレイピングとは、Webページから必要な情報を自動で取得する技術のことです。手作業でコピー&ペーストしていた作業を自動化できるようになると、データ収集の効率が一気に上がります。今回は、Pythonでスクレイピングを行う際によく使われる「Requests」と「BeautifulSoup」という2つのライブラリを使って、実際にWebページから情報を取得する方法を解説していきます。

Webスクレイピングとは?基礎知識をおさえよう

スクレイピングの仕組み

Webスクレイピングは、大まかに次のような流れで行われます。

  1. Requestsライブラリを使って、対象のWebページのHTMLデータを取得する
  2. 取得したHTMLをBeautifulSoupで解析し、必要な情報(テキストやリンクなど)を抜き出す
  3. 抜き出したデータをファイルやデータベースに保存する

この「取得」と「解析」の2つのステップを、それぞれRequestsとBeautifulSoupが担当してくれるイメージです。

スクレイピングを行う際の注意点・マナー

スクレイピングは便利な技術ですが、以下の点に注意して実施しましょう。

  • 対象サイトの利用規約を確認し、スクレイピングが禁止されていないかチェックする
  • 短時間に大量のリクエストを送らない(サーバーに負荷をかけない)
  • 取得したデータの著作権や個人情報に配慮する
  • 可能であれば、サイトが提供しているAPIの利用を優先する

「ルールを守って使う」ことが、スクレイピングを学ぶうえでの大前提です。

必要なライブラリをインストールしよう

RequestsとBeautifulSoupは標準ライブラリではないため、事前にインストールが必要です。ターミナル(コマンドプロンプト)で以下のコマンドを実行してください。

Requestsのインストール

pip install requests

BeautifulSoupのインストール

pip install beautifulsoup4

インストールが完了したら、Pythonファイルの先頭で以下のようにインポートして準備完了です。

import requests
from bs4 import BeautifulSoup

RequestsでWebページを取得してみよう

基本的な使い方

Requestsライブラリを使うと、たった数行のコードでWebページのHTMLを取得できます。

import requests

url = "https://example.com"
response = requests.get(url)

print(response.text)

requests.get(url)で指定したURLにアクセスし、レスポンス(応答)を受け取ります。response.textには、そのページのHTMLデータが文字列として格納されています。

レスポンスの確認方法

取得がうまくいったかどうかは、ステータスコードで確認できます。

print(response.status_code)

「200」が返ってくれば取得成功です。よく見かける「404」はページが見つからない、「403」はアクセスが拒否されたことを意味します。エラーが出た場合は、URLが正しいか、アクセス制限がないかを確認しましょう。

BeautifulSoupでHTMLを解析しよう

パーサーの指定

取得したHTMLを解析するには、BeautifulSoupオブジェクトを作成します。

soup = BeautifulSoup(response.text, "html.parser")

第2引数の"html.parser"は「パーサー」と呼ばれるもので、HTMLを解析するための方式を指定しています。初心者の方はまず標準搭載のhtml.parserを使えばOKです。

要素の取得方法(find・find_all)

BeautifulSoupでは、find()やfind_all()メソッドを使ってHTML要素を取得します。

# 最初に見つかった1つのh1タグを取得
title = soup.find("h1")
print(title.text)

# ページ内のすべてのaタグ(リンク)を取得
links = soup.find_all("a")
for link in links:
    print(link.get("href"))

find()は条件に合う要素を1つだけ、find_all()は条件に合う要素を全て取得します。.textでタグ内のテキストを、.get("href")でリンク先のURLを取り出すことができます。

実践例:タイトルとリンク一覧を抜き出す

ここまでの内容を組み合わせて、実際のスクレイピングコードを完成させてみましょう。

import requests
from bs4 import BeautifulSoup

url = "https://example.com"
response = requests.get(url)

if response.status_code == 200:
    soup = BeautifulSoup(response.text, "html.parser")

    # ページタイトルを取得
    title = soup.find("title")
    print("タイトル:", title.text)

    # すべてのリンクを取得して表示
    for a_tag in soup.find_all("a"):
        href = a_tag.get("href")
        text = a_tag.text.strip()
        print(f"{text}: {href}")
else:
    print("ページの取得に失敗しました。ステータスコード:", response.status_code)

このように、Requestsで取得したHTMLをBeautifulSoupで解析することで、簡単にページ内の情報を抜き出すことができます。

まとめ

今回は、RequestsとBeautifulSoupを使ったWebスクレイピングの基本を解説しました。

  • Requestsを使ってWebページのHTMLを取得する方法
  • BeautifulSoupを使ってHTMLを解析し、必要な情報を抜き出す方法
  • スクレイピングを行う際のマナーや注意点

これらを組み合わせることで、Webサイトから自動的に情報を収集する仕組みを作れるようになります。ただし、スクレイピングは対象サイトに負荷をかける可能性もある技術なので、必ず利用規約を確認し、マナーを守って活用しましょう。

次回は、取得したデータをCSVファイルに保存する方法や、複数ページにわたるスクレイピングの実践方法について解説していきます。お楽しみに!

\ 初心者から未経験でプロを目指す /

Pythonプログラミング マンツーマン詳細はこちら >

タイトルとURLをコピーしました