カテゴリ: Python 更新日: 2026/06/09

Pythonでスクレイピングのエラーハンドリングを行う方法!初心者でも安心して動かせる対策を徹底解説

Pythonでスクレイピングのエラーハンドリングを行う方法
Pythonでスクレイピングのエラーハンドリングを行う方法

先生と生徒の会話形式で理解しよう

生徒

「Pythonでスクレイピングしていたら、途中でエラーが出て止まってしまいました…どうすればいいですか?」

先生

「それは“エラーハンドリング”を使うと解決できます。エラーが出てもプログラムを止めずに処理できるようになります。」

生徒

「エラーを無視できるってことですか?」

先生

「無視というより、安全に対応するイメージです。エラーが起きたときにどうするかを決めておくんです。」

生徒

「なるほど!やり方を教えてください!」

先生

「では、基本から順番に見ていきましょう!」

1. エラーハンドリングとは?

1. エラーハンドリングとは?
1. エラーハンドリングとは?

エラーハンドリングとは、プログラムの実行中に発生するエラーに対して、あらかじめ対処方法を用意しておく仕組みです。 例えば、Webスクレイピングでは、ページが存在しない場合や通信が失敗する場合があります。そのままではプログラムが止まってしまいますが、 エラーハンドリングを使えば、処理を続けることができます。

2. tryとexceptの基本構文

2. tryとexceptの基本構文
2. tryとexceptの基本構文

Pythonでは、tryexceptを使ってエラー処理を行います。 tryの中でエラーが発生した場合、exceptの処理が実行されます。


try:
    print(10 / 0)
except:
    print("エラーが発生しました")

このコードでは、0で割ることでエラーが発生しますが、プログラムは止まらずにメッセージが表示されます。


エラーが発生しました

3. スクレイピングでよくあるエラー

3. スクレイピングでよくあるエラー
3. スクレイピングでよくあるエラー

Webスクレイピングでは、さまざまなエラーが発生します。例えば、URLが間違っている場合や、 サーバーにアクセスできない場合があります。また、HTMLの構造が変わって要素が見つからない場合もあります。


import requests

try:
    response = requests.get("https://example.com/invalid")
    print(response.status_code)
except:
    print("通信エラーが発生しました")

通信エラーが発生しても、安全に処理を続けることができます。

4. エラーの種類を指定する方法

4. エラーの種類を指定する方法
4. エラーの種類を指定する方法

すべてのエラーをまとめて処理するのではなく、特定のエラーだけを処理することもできます。 これにより、より正確な対応が可能になります。


try:
    num = int("abc")
except ValueError:
    print("数値に変換できませんでした")

この例では、文字列を数値に変換できなかった場合だけ処理が実行されます。 どのエラーが発生したのかを把握することが大切です。

5. エラー内容を表示する方法

5. エラー内容を表示する方法
5. エラー内容を表示する方法

エラーの内容を表示すると、原因を調べやすくなります。これはデバッグ(問題を見つけて修正する作業)に役立ちます。


try:
    print(10 / 0)
except Exception as e:
    print("エラー内容:", e)

エラー内容: division by zero

このように、エラーの詳細を確認することで、どこを直せばよいかがわかります。

6. finallyで必ず実行する処理

6. finallyで必ず実行する処理
6. finallyで必ず実行する処理

finallyは、エラーの有無に関係なく必ず実行される処理です。 ファイルを閉じる処理などに使われます。


try:
    print("処理開始")
    x = 1 / 0
except:
    print("エラー発生")
finally:
    print("処理終了")

処理開始
エラー発生
処理終了

必ず実行したい処理は、finallyに書くようにしましょう。

7. スクレイピングでの実践的なエラーハンドリング

7. スクレイピングでの実践的なエラーハンドリング
7. スクレイピングでの実践的なエラーハンドリング

実際のスクレイピングでは、ページ取得とデータ取得の両方でエラー対策が必要です。 それぞれにエラーハンドリングを入れることで、より安全なプログラムになります。


import requests
from bs4 import BeautifulSoup

try:
    response = requests.get("https://example.com")
    soup = BeautifulSoup(response.text, "html.parser")
    
    try:
        title = soup.find("h1").text
        print(title)
    except:
        print("タイトルが見つかりませんでした")
        
except:
    print("ページの取得に失敗しました")

このように、処理ごとにエラー対策をすることで、どこで問題が起きたのかが分かりやすくなります。

8. エラーハンドリングを使うメリット

8. エラーハンドリングを使うメリット
8. エラーハンドリングを使うメリット

エラーハンドリングを使うことで、プログラムが途中で止まるのを防げます。 また、原因の特定がしやすくなり、修正も簡単になります。 特にWebスクレイピングでは、外部サイトに依存するため、エラー対策は必須です。

初心者のうちは、まずtryとexceptを使ってエラーに慣れることが重要です。 少しずつエラーの種類を理解して、より細かい制御ができるようになりましょう。

まとめ

まとめ
まとめ

エラーハンドリングの重要ポイントを振り返る

PythonでのWebスクレイピングにおいて、エラーハンドリングは非常に重要な技術です。スクレイピングは外部のWebサイトからデータを取得する処理であるため、通信エラーやHTML構造の変更、存在しないページへのアクセスなど、さまざまな問題が発生する可能性があります。 そのため、エラーハンドリングを適切に実装することで、プログラムが途中で停止するのを防ぎ、安定したデータ取得を実現できます。

特に初心者の方は、「エラーが出たらプログラムが止まってしまう」という経験を何度もすると思います。しかし、tryとexceptを使うことで、エラー発生時の処理をあらかじめ決めておくことができ、安心してプログラムを動かすことができます。

スクレイピングで意識すべきエラー対策

Webスクレイピングでは、以下のようなエラーがよく発生します。

  • 通信エラー(サーバーに接続できない)
  • HTTPステータスエラー(404や500など)
  • HTML要素が見つからないエラー
  • データ変換エラー(文字列を数値に変換できないなど)

これらのエラーに対して、個別に対応できるようにしておくことで、より実践的で強いプログラムになります。また、Exceptionとしてまとめて処理するのではなく、ValueErrorやrequestsの例外など、具体的なエラーを指定することで、より精度の高いエラーハンドリングが可能になります。

実践的なサンプルプログラム

ここでは、PythonのWebスクレイピングでよく使うエラーハンドリングを組み合わせた実践的なサンプルコードを紹介します。


import requests
from bs4 import BeautifulSoup

url = "https://example.com"

try:
    response = requests.get(url, timeout=5)
    response.raise_for_status()
    
    soup = BeautifulSoup(response.text, "html.parser")
    
    try:
        title = soup.find("h1").text
        print("タイトル:", title)
    except AttributeError:
        print("タイトル要素が見つかりませんでした")
        
except requests.exceptions.Timeout:
    print("タイムアウトが発生しました")
except requests.exceptions.RequestException as e:
    print("通信エラー:", e)
finally:
    print("スクレイピング処理を終了します")

このコードでは、通信エラー、タイムアウト、HTML要素の取得失敗など、複数のエラーに対応しています。また、finallyを使うことで、処理の最後に必ずメッセージを表示するようにしています。

エラーハンドリングを習得するメリット

エラーハンドリングを習得することで、プログラムの品質が大きく向上します。具体的には以下のようなメリットがあります。

  • プログラムが途中で止まらなくなる
  • エラー原因を特定しやすくなる
  • ユーザーに分かりやすいメッセージを表示できる
  • 長時間のスクレイピング処理でも安定して動作する

特にPython初心者の方にとっては、エラーは怖いものに感じるかもしれません。しかし、エラーハンドリングを正しく理解すれば、エラーは「問題を教えてくれるヒント」に変わります。積極的に活用して、より安全で信頼性の高いプログラムを作っていきましょう。

先生と生徒の振り返り会話

生徒

「エラーハンドリングって、最初は難しそうだと思っていましたが、意外とシンプルですね!」

先生

「そうですね。基本はtryとexceptだけです。ただし、どのエラーにどう対応するかが重要になります。」

生徒

「スクレイピングでは特にエラーが多いって聞いたので、ちゃんと対策しないといけないですね。」

先生

「その通りです。通信エラーやHTMLの変更は日常的に起こるので、エラーハンドリングは必須です。」

生徒

「あと、エラー内容を表示することで原因が分かりやすくなるのも良かったです!」

先生

「デバッグにはとても役立ちます。Exception as eの書き方はぜひ覚えておきましょう。」

生徒

「finallyも便利ですね。最後に必ず処理を実行できるのは安心です。」

先生

「はい。ログ出力や後処理にとても役立ちます。実務でもよく使われますよ。」

生徒

「これでエラーが出ても怖くなくなりました!もっと色々なケースに対応できるように練習します!」

先生

「その意気です。エラーハンドリングを使いこなせば、安定したスクレイピングプログラムが作れるようになりますよ。」

コメント
コメント投稿は、ログインしてください

まだ口コミはありません。

関連記事:
Python のWebスクレイピングの記事一覧へ
新着記事
New1
Python
Pythonの整数と浮動小数点数の違いとは?数値型の基本を解説
New2
Python
Pythonで文字列をリストに変換する方法!split()とjoin()の使い方
New3
Python
Pythonのbreakとcontinueの違いとは?ループの制御方法をマスター
New4
Python
Pythonのstartswith()・endswith()の使い方!文字列の前後をチェック
人気記事
No.1
Java&Spring記事人気No1
PHP
PHPの特殊文字とエスケープ処理を完全ガイド!初心者向けにhtmlspecialcharsとhtmlentitiesをやさしく解説
No.2
Java&Spring記事人気No2
PHP
PHP の文字列のフォーマット(sprintf, printf)
No.3
Java&Spring記事人気No3
Python
Pythonで文字列を置換する方法!replace()の使い方と正規表現の活用
No.4
Java&Spring記事人気No4
Python
Pythonのクロージャー(Closure)とは?関数内関数とnonlocalの活用
No.5
Java&Spring記事人気No5
Python
Pythonでリストを分割する方法(スライス / split() / itertools)
No.6
Java&Spring記事人気No6
Python
Pythonで経過時間を測る方法をやさしく解説!初心者向けtime.perf_counterとtime.sleepの使い方
No.7
Java&Spring記事人気No7
Python
Pythonのstartswith()・endswith()の使い方!文字列の前後をチェック
No.8
Java&Spring記事人気No8
PHP
PHPの認証機能を実装する方法!初心者でもわかるログイン・ログアウト処理の基本