LoginSignup
0
2

スクレイピングでステータスコードの取得と利用方法

Last updated at Posted at 2023-05-26

特定のURLに対して、ステータスコードを取得し、有効性を判断します。
例えば、リストからURLへ逐次アクセスする場合、アクセス先が有効かどうかを確認しておけばアクセスエラーをあらかじめ回避できます。

URLの有効性の判定はHTTPレスポンスのステータスコードを確認します。
ステータスコード200が取得できれば、そのURLは一応正常という形です。
さらに、200以外のステータスコードでも対応方法を選ぶことができます。

問題の判定に利用しているのは以下のようになります。

ステータスコード 不具合 対応方法
404 URLが間違っている
無効になった可能性が高い
URLのチェック
429 リダイレクト(phpか.htaccess)が設定されている可能性が高い 個別に確認
seleniumを利用してリダイレクト先を再取得する
30x httpリダイレクトが設定されている meta情報にリダイレクト先が記載されているのでURLを書き換える
5xx サーバーエラー 時間をおいてアクセス

実際に判定に利用しているコードです。

.py
import requests

def isCheckURL(url):
    try:
        response = requests.head(url, timeout=10)
        if response.status_code == 200:
            return True
        elif response.status_code == 405:  # Method Not Allowed
            allowed_methods = response.headers.get('Allow', '')
            if 'GET' in allowed_methods:
                response = requests.get(url, timeout=10)
                if response.status_code == 200:
                    return True
                else:
                    print(f"URL is not valid. HTTP status code: {response.status_code}")
                    return False
            else:
                print(f"URL is not valid. Neither HEAD nor GET requests are allowed.")
                return False
        else:
            print(f"URL is not valid. HTTP status code: {response.status_code}")
            return False

    except requests.exceptions.RequestException as e:
        print(f"URL is not valid. Error: {e}")
        return False

url = "https://example.com"
if isCheckURL(url):
    print("The URL is valid.")
else:
    print("The URL is not valid.")

#個人的な感想
これを使い始めてから、スクレイピングやクローラーの設計・メンテナンスがとても楽になりました。
アクセスの可否を事前判定できますし、動かしながら問題箇所を個別に判定できます。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2