24
9

初めまして

株式会社 Panta Rhei CEOのかずです。Pandasistaというハンネでツイッターをやっています。pandas大好きです。データも好き。

Qiita Engineer Festaでマラソンを完走したい

Qiita Engineer Festaという素敵なイベントがあります。

その中で投稿マラソンという素敵なコースが!!!
なんと「38記事書けば素敵な景品がもらえる!!」らしいです。

1日1記事でギリギリ達成みたいです。
頑張っていきましょう!

クローリングでよく見るステータスコード

さて本題です。
statuscode_404.jpeg
弊社では、データを取り扱うという特性から、スクレイピング基盤がしっかりしています。
リクエスト先のサーバーに負荷をかけないスクレイピングなどのTipsが多くあり、
本記事ではそのうちよく見るステータスコードとそうでないものをまとめました。
定義されているほとんどのステータスコードを網羅しているので少しでも助けになれば幸いです。

本題

以下がステータスコード一覧表です

ステータスコード 意味 説明 よく見るか 対応方法
100 Continue リクエストの初めの部分を受け取り、クライアントが続行を継続できる状態。 全然見ない
101 SwitchingProtocols プロトコルの切り替えが行われることを示す。 全然見ない
102 Processing リクエストが受け入れられたが、完了までに時間がかかることを示す。 全然見ない
200 OK リクエストが正常に成功したことを示す。 ほとんどこれ(だと嬉しい) 全件これを目指してクロールします
201 Created リクエストが成功し、新しいリソースが作成されたことを示す。 たまーに見る
202 Accepted リクエストは受け入れられたが、まだ処理されていないことを示す。 あんまり見ない
203 Non-AuthoritativeInformation リクエストは成功したが、返される情報が他のソースから取得されたものであることを示す。 見る
204 NoContent リクエストは成功したが、返すコンテンツがないことを示す。 全然見ない
205 ResetContent リクエストは成功したが、クライアントがリセットを行う必要があることを示す。 全然見ない
206 PartialContent リクエストの一部が成功したことを示す。 全然見ない
207 Multi-Status 複数のステータスが返される場合に使用される。 全然見ない
300 MultipleChoices リクエストに対して複数の選択肢があることを示す。 全然見ない
301 MovedPermanently リクエストしたリソースが恒久的に別のURLに移動したことを示す。 よく見る ただのリダイレクト
302 Found リクエストしたリソースが一時的に別のURLに移動したことを示す。 たまに見る ただのリダイレクト
303 SeeOther リクエストに対する応答が別のURIにあることを示す。 たまに見る
304 NotModified リソースは変更されていないことを示し、キャッシュを使用してリソースを取得することを示す。 見ない
305 UseProxy リクエストされたリソースはプロキシを経由してアクセスする必要があることを示す。 見ない 会社とか特殊なネットワークにいる環境ではあるのかも
307 TemporaryRedirect リクエストされたリソースが一時的に別のURIにあることを示す。 見ない 基本的にURLベースでのクロールなので
308 PermanentRedirect リクエストされたリソースが恒久的に別のURIにあることを示す。 見ない 基本的にURLベースでのクロールなので
400 BadRequest クライアントのリクエストにエラーがあることを示す。 よく見る headersとかcookie保持の設定とかを変える
401 Unauthorized 認証が必要であることを示す。 見ない ログインや認証が必要なデータをスクレピングするのはあんまり良くない(個人的な感想)
402 PaymentRequired 将来の使用のために予約されている。 見たことがある
403 Forbidden サーバーがリクエストを拒否していることを示す。 良く見る 原因が多種多様。IPBanの可能性もあればcookieやセッションベースでForbiddenしている場合もある
404 NotFound リクエストしたリソースが見つからないことを示す。 良く見る URLやサイトのディレクトリ構造が変わっているので再度xpath解析等を行おう
405 MethodNotAllowed リクエストしたメソッドが許可されていないことを示す。 見ない これが出てくるようであればPostリクエストとかにしてみるのも有りかもしれない。
406 NotAcceptable リクエストしたリソースが、リクエストのヘッダで指定された条件に合致しないことを示す。 たまに見る headersを修正する
407 ProxyAuthenticationRequired プロキシ認証が必要であることを示す。 全然見ない インターネットでクローリングしていたら多分大丈
408 RequestTimeout サーバーがリクエストを待っている間にタイムアウトしたことを示す。 たまにある 結構クライアント側の問題だったりする
409 Conflict リクエストが現在のサーバーの状態と矛盾していることを示す。 全然見ない
410 Gone リクエストされたリソースが永久に利用できなくなったことを示す。 全然見ない
411 LengthRequired  リクエストがContent-Lengthヘッダフィールドを含んでいないためにサーバーがリクエストを拒否していることを示す。 全然見ない 分かりやすいステータスですね。Content-Lengthを含めましょう
412 PreconditionFailed リクエストがサーバーに対して指定した前提条件が失敗したことを示す。 全然見ない
413 PayloadTooLarge リクエストペイロードがサーバーが処理できる限界を超えていることを示す。 全然見ない
414 URITooLong リクエストURIがサーバーが処理できる限界を超えていることを示す。 全然見ない
415 UnsupportedMediaType リクエストされたメディアタイプがサーバーでサポートされていないことを示す。 全然見ない
416 RangeNotSatisfiable リクエストのRangeヘッダフィールドが無効であることを示す。 全然見ない
417 ExpectationFailed Expectリクエストヘッダフィールドがサーバーで満たされなかったことを示す。 全然見ない
418 I'mateapot エイプリルフールのジョークとして定義されたHTTPステータスコード。 見たい
421 MisdirectedRequest リクエストがレスポンスを生成することができないサーバーに送信されたことを示す。 全然見ない
422 UnprocessableEntity リクエストが適切に構文解析されたが、論理エラーが含まれていることを示す。 全然見ない ただクローラデバック時はよく見そう
423 Locked リクエストされたリソースがロックされていることを示す。 全然見ない
424 FailedDependency 以前のリクエストが失敗したため、現在のリクエストが失敗したことを示す。 全然見ない
425 TooEarly リクエストがサーバーにとって時期尚早であることを示す。 全然見ない
426 UpgradeRequired クライアントが異なるプロトコルにアップグレードする必要があることを示す。 全然見ない
428 PreconditionRequired リクエストが条件付きで送信されなければならないことを示す。
429 TooManyRequests クライアントが短期間にあまりにも多くのリクエストを送信していることを示す。 良く見る IPBanです。IP変えましょう。多分IP変えても多分またすぐ429になります。
431 RequestHeaderFieldsTooLarge リクエストヘッダフィールドが大きすぎるためサーバーがリクエストを処理できないことを示す。 見たことある
451 UnavailableForLegalReasons 法的な理由によりリソースが利用できないことを示す。 見たことない
500 InternalServerError サーバー内部でエラーが発生したことを示す。 良く見る 原因が多種多様すぎる、権限周りを見てみよう
501 NotImplemented サーバーがリクエストを処理するための機能を実装していないことを示す。 良く見る headersに問題がある
502 BadGateway ゲートウェイまたはプロキシサーバーが上位サーバーから無効なレスポンスを受け取ったことを示す。 良く見る 時間を置くとよく解決する
503 ServiceUnavailable サーバーが一時的に利用不可能であることを示す。 良く見る
504 GatewayTimeout ゲートウェイまたはプロキシサーバーが上位サーバーからのレスポンスを待つ間にタイムアウトしたことを示す。 たまに見る 権限系の問題であることが多いです
505 HTTPVersionNotSupported サーバーがリクエストで使用されたHTTPプロトコルバージョンをサポートしていないことを示す。 全然見ない
506 VariantAlsoNegotiates サーバー内部の構成エラーを示す。 全然見ない
507 InsufficientStorage サーバーがリクエストを処理するためのストレージを持っていないことを示す。 全然見ない
508 LoopDetected サーバーが無限ループを検出したことを示す。 全然見ない
510 NotExtended 拡張が必要であることを示す。 全然見ない
511 NetworkAuthenticationRequired ネットワークアクセスのために認証が必要であることを示す。 全然見ない

まとめ

1XX系

全然見ないです

2XX系

200以外はあんまり見ないです

3XX系

よく見ますがリダイレクト系なのでスルーで大丈夫です!

4XX系

エラーです。URLのタイポからheadersの内容書き換えまで全てを疑いましょう。
URLのタイポでは、例えば動的にhrefが生成されるようなJSゴリゴリのサイトだと結構発掘されます。

5XX系

調べると「サーバー側の問題です」「こちら側でなんとかできません」と出てきますが、結構こちら側でなんとかできます。
headersをどうにかいじってください。またcookieやセッションも監視しましょう。

終わりに

弊社はGoogle Cloud for StartupsのAIスタートアップに認定されているAI企業です

有り余る技術力により、世のAI活用課題を解決致します。
クラウド基盤から内製化AI、一気通貫のデータ利活用基盤構築まで、何かお困りごとがありましたらぜひ弊社、
株式会社 Panta Rheiにご相談ください!

24
9
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
24
9