検索
ホームページバックエンド開発PHPチュートリアル【Python】Webクローラ(3): HTTPステータスコードの例外処理と分類

まず HTTP 例外処理について話しましょう。
urlopen が応答を処理できない場合、urlError が生成されます。
ただし、ValueError、TypeErrorなどの一般的なPython APIの例外も同時に発生します。
HTTPError は urlError のサブクラスで、通常は特定の HTTP URL で生成されます。

1.URLError
通常、URLError は、ネットワーク接続がない (特定のサーバーへのルーティングがない) か、サーバーが存在しない場合に発生します。

この場合、例外には「reason」属性もあり、これはタプル (不変の配列として理解できます) であり、

にはエラー番号とエラー メッセージが含まれます。

例外処理を体験するために urllib2_test06.py を構築しましょう:

[python] ビュー 普通のコピー

  1. import urllib2
  2. req = urllib2.Request('http://www.baibai.com')
  3. try: urllib2.urlopen(req)
  4. 以外 urllib2.URLError, e:
  5. print e.reason

F5 キーを押すと、印刷された内容が次のように表示されます:

[Errno 11001] getaddrinfo failed

つまり、エラー番号は 11001 で、内容は getaddrinfo failed


2 .HTTPError
サーバー上のすべての HTTP 応答オブジェクトの応答には、数値の「ステータス コード」が含まれています。

ステータス コードは、サーバーがリクエストを完了できないことを示す場合があります。デフォルトのハンドラーは、この応答の一部を処理します。

例: 応答が「リダイレクト」で、クライアントが別のアドレスからドキュメントを取得する必要がある場合、urllib2 がそれを処理します。

その他、処理できないもの、urlopen は HTTPError を生成します。

典型的なエラーには、「404」(ページが見つかりません)、「403」(リクエストが禁止されています)、「401」(検証付きリクエスト)などがあります。

HTTPステータスコードは、HTTPプロトコルによって返される応答のステータスを示します。

たとえば、クライアントがサーバーにリクエストを送信し、リクエストされたリソースが正常に取得された場合、返されるステータス コードは 200 で、応答が成功したことを示します。

要求されたリソースが存在しない場合、通常は 404 エラーが返されます。

HTTPステータスコードは、通常、1から5までの5つの数字から始まり、3桁の整数で構成される次の5種類に分類されます:

---------------- -------------------------------------------------- ----------------------------------

200: リクエスト成功 処理方法: レスポンス内容を取得し、処理してください

201: リクエストが完了し、新しいリソースが作成されます。新しく作成されたリソースの URI は応答エンティティで取得できます。 処理方法: クローラーでは検出されません。

202: リクエストは受け入れられますが、処理はまだ完了していません。

204: リクエストはすでにサーバー側で実行されましたが、新しい情報は返されませんでした。クライアントがユーザー エージェントの場合、この目的のために独自のドキュメント ビューを更新する必要はありません。 処理方法: 破棄

300: このステータス コードは HTTP/1.0 アプリケーションによって直接使用されませんが、3XX タイプの応答のデフォルトの解釈としてのみ使用されます。要求された利用可能なリソースが複数あります。処理方法: プログラムで処理できる場合はさらに処理され、プログラムで処理できない場合は破棄されます。そのため、要求されたリソースには永続的な URL が割り当てられます。処理方法: 割り当てられた URL にリダイレクト

: 要求されたリソースは別の URL に一時的に保存されます 処理方法: 一時 URL にリダイレクト

304 要求されたリソースは更新されていません 処理方法:破棄

400 不正なリクエスト 処理方法:破棄

401 不正な処理方法:破棄

403 禁止 処理方法:破棄

404 なしFound 処理方法: 破棄

5XX 「5」で始まるステータス コードは、サーバーがエラーを検出し、リクエストの実行を続行できないことを示します 処理方法: 破棄

---- -------------------------------------------------- - --------------------------------------

HTTPErrorインスタンスが生成されます整数の「code」属性があり、これはサーバーによって送信された関連エラー番号です。

エラー コード デフォルトのプロセッサがリダイレクト (300 以外の数字) を処理し、100 ~ 299 の範囲の数字が成功を示すため、エラー番号 400 ~ 599 のみが表示されます。
BaseHTTPServer.BaseHTTPRequestHandler.response は、HTTP プロトコルで使用されるすべての応答番号を示す、非常に便利な応答番号辞書です。

エラー番号が生成されると、サーバーはHTTPエラー番号とエラーページを返します。

ページから返される応答オブジェクトの応答として HTTPError インスタンスを使用できます。

これは、error 属性と同様に、read、geturl、info メソッドも含まれていることを意味します。

urllib2_test07.py を構築して体験してみましょう:

[python] ビュー 普通のコピー

  1. import urllib2
  2. req = urllib2.Request('http://bbs.csdn.net/callmewhy')
  3. 試してみる :
  4. urllib2.urlopen(req)
  5. 以外 urllib2.URLError、e:
  6. 印刷 e.code
  7. #print e.read()

F5 を押すと、404 エラー コードが出力されることがわかります。これは、このページが見つからないことを意味します。

3.Wrapping

したがって、HTTPError または URLError に備えたい場合、基本的な方法が 2 つあります。 2番目のものを使用することをお勧めします。

最初の例外処理ソリューションを示すために urllib2_test08.py を構築しましょう:

[python] ビュー 普通のコピー

  1. from urllib2 import Request, urlopen, URLError, HTTPError
  2. req = Request('http://bbs. csdn.net/callmewhy')
  3. 試してみてください:
  4. response = urlopen(req)
  5. HTTPError を除く、e:
  6. print 「サーバーはリクエストを実行できませんでした。」
  7. print 'エラーコード: ', e.code
  8. 以外 URLError、e:
  9. print 「サーバーに到達できませんでした。」
  10. print 'Reason: ', e.reason
  11. else:
  12. print 「例外は発生しませんでした。」
  13. # すべて問題ありません


およびその他の言説と同様に、試してから捕捉し、その内容を印刷します。

ここで注意すべき点、ただし HTTPError は必須です



🎜🎜我们建一urllib2_test09.py来示范一​​下第二种异常处理的方案:🎜🎜🎜🎜🎜🎜🎜🎜🎜[python] view 普通のコピー 🎜🎜
  1. from urllib2 import Request, urlopen, URLError, HTTPError
  2. req = Request('http://bbs. csdn.net/callmewhy')
  3. 試してみてください:
  4. response = urlopen(req)
  5. 以外 URLエラー、e:
  6. if hasattr(e, 'code'):
  7. print 「サーバーはリクエストを実行できませんでした。」
  8. print 'エラーコード: ', e.code
  9. elif hasattr(e, 「理由」) :
  10. print 「サーバーに到達できませんでした。」
  11. print '理由: ', e .reason
  12. else:
  13. print 「例外は発生しませんでした。」
  14. # すべて問題ありません

以上は、[Python] ネットワーク爬虫 (3) を紹介しました。側面の内容を含む、一般的な処理と HTTP 状態コードの分割であり、PHP 教則に関心のある友人の助けになることが望まれます。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
PHP:サーバー側のスクリプト言語の紹介PHP:サーバー側のスクリプト言語の紹介Apr 16, 2025 am 12:18 AM

PHPは、動的なWeb開発およびサーバー側のアプリケーションに使用されるサーバー側のスクリプト言語です。 1.PHPは、編集を必要とせず、迅速な発展に適した解釈言語です。 2。PHPコードはHTMLに組み込まれているため、Webページの開発が簡単になりました。 3。PHPプロセスサーバー側のロジック、HTML出力を生成し、ユーザーの相互作用とデータ処理をサポートします。 4。PHPは、データベースと対話し、プロセスフォームの送信、サーバー側のタスクを実行できます。

PHPとWeb:その長期的な影響を調査しますPHPとWeb:その長期的な影響を調査しますApr 16, 2025 am 12:17 AM

PHPは過去数十年にわたってネットワークを形成しており、Web開発において重要な役割を果たし続けます。 1)PHPは1994年に発信され、MySQLとのシームレスな統合により、開発者にとって最初の選択肢となっています。 2)コア関数には、動的なコンテンツの生成とデータベースとの統合が含まれ、ウェブサイトをリアルタイムで更新し、パーソナライズされた方法で表示できるようにします。 3)PHPの幅広いアプリケーションとエコシステムは、長期的な影響を促進していますが、バージョンの更新とセキュリティの課題にも直面しています。 4)PHP7のリリースなど、近年のパフォーマンスの改善により、現代の言語と競合できるようになりました。 5)将来的には、PHPはコンテナ化やマイクロサービスなどの新しい課題に対処する必要がありますが、その柔軟性とアクティブなコミュニティにより適応性があります。

なぜPHPを使用するのですか?利点と利点が説明されましたなぜPHPを使用するのですか?利点と利点が説明されましたApr 16, 2025 am 12:16 AM

PHPの中心的な利点には、学習の容易さ、強力なWeb開発サポート、豊富なライブラリとフレームワーク、高性能とスケーラビリティ、クロスプラットフォームの互換性、費用対効果が含まれます。 1)初心者に適した学習と使用が簡単。 2)Webサーバーとの適切な統合および複数のデータベースをサポートします。 3)Laravelなどの強力なフレームワークを持っています。 4)最適化を通じて高性能を達成できます。 5)複数のオペレーティングシステムをサポートします。 6)開発コストを削減するためのオープンソース。

神話を暴く:PHPは本当に死んだ言語ですか?神話を暴く:PHPは本当に死んだ言語ですか?Apr 16, 2025 am 12:15 AM

PHPは死んでいません。 1)PHPコミュニティは、パフォーマンスとセキュリティの問題を積極的に解決し、PHP7.xはパフォーマンスを向上させます。 2)PHPは最新のWeb開発に適しており、大規模なWebサイトで広く使用されています。 3)PHPは学習しやすく、サーバーはうまく機能しますが、タイプシステムは静的言語ほど厳格ではありません。 4)PHPは、コンテンツ管理とeコマースの分野で依然として重要であり、エコシステムは進化し続けています。 5)OpcacheとAPCを介してパフォーマンスを最適化し、OOPと設計パターンを使用してコードの品質を向上させます。

PHP対Pythonの議論:どちらが良いですか?PHP対Pythonの議論:どちらが良いですか?Apr 16, 2025 am 12:03 AM

PHPとPythonには独自の利点と短所があり、選択はプロジェクトの要件に依存します。 1)PHPは、Web開発に適しており、学習しやすく、豊富なコミュニティリソースですが、構文は十分に近代的ではなく、パフォーマンスとセキュリティに注意を払う必要があります。 2)Pythonは、簡潔な構文と学習が簡単なデータサイエンスと機械学習に適していますが、実行速度とメモリ管理にはボトルネックがあります。

PHPの目的:動的なWebサイトの構築PHPの目的:動的なWebサイトの構築Apr 15, 2025 am 12:18 AM

PHPは動的なWebサイトを構築するために使用され、そのコア関数には次のものが含まれます。1。データベースに接続することにより、動的コンテンツを生成し、リアルタイムでWebページを生成します。 2。ユーザーのインタラクションを処理し、提出をフォームし、入力を確認し、操作に応答します。 3.セッションとユーザー認証を管理して、パーソナライズされたエクスペリエンスを提供します。 4.パフォーマンスを最適化し、ベストプラクティスに従って、ウェブサイトの効率とセキュリティを改善します。

PHP:データベースとサーバー側のロジックの処理PHP:データベースとサーバー側のロジックの処理Apr 15, 2025 am 12:15 AM

PHPはMySQLIおよびPDO拡張機能を使用して、データベース操作とサーバー側のロジック処理で対話し、セッション管理などの関数を介してサーバー側のロジックを処理します。 1)MySQLIまたはPDOを使用してデータベースに接続し、SQLクエリを実行します。 2)セッション管理およびその他の機能を通じて、HTTPリクエストとユーザーステータスを処理します。 3)トランザクションを使用して、データベース操作の原子性を確保します。 4)SQLインジェクションを防ぎ、例外処理とデバッグの閉鎖接続を使用します。 5)インデックスとキャッシュを通じてパフォーマンスを最適化し、読みやすいコードを書き、エラー処理を実行します。

PHPでのSQL注入をどのように防止しますか? (準備された声明、PDO)PHPでのSQL注入をどのように防止しますか? (準備された声明、PDO)Apr 15, 2025 am 12:15 AM

PHPで前処理ステートメントとPDOを使用すると、SQL注入攻撃を効果的に防ぐことができます。 1)PDOを使用してデータベースに接続し、エラーモードを設定します。 2)準備方法を使用して前処理ステートメントを作成し、プレースホルダーを使用してデータを渡し、メソッドを実行します。 3)結果のクエリを処理し、コードのセキュリティとパフォーマンスを確保します。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター