Python Urllib.Request と urlopen() を使用したインターネット アクセス

⚡ スマートサマリー

urllibは標準です Python インターネットデータにアクセスするためのモジュールで、プログラムを開くことができます URLs にアクセスして HTML、JSON、またはバイナリコンテンツを取得します。urllib.request.urlopen() 関数は Web アドレスに接続し、サーバー応答を直接読み取ります。 Python.

  • 🔘 標準ライブラリ: urllibには以下が同梱されています Python また、リクエスト、エラー、パース、ロボットパーサーモジュールをバンドルします。 URL タスク。
  • ☑️ 開く URL: urllib.request.urlopen() 関数は接続を開き、getcode() は 200 などの HTTP ステータスを返します。
  • 回答をお読みください: read() メソッドは生のバイト列を返し、それを decode(“utf-8”) で読みやすいテキストに変換します。
  • 🧪 エラーを処理する: HTTPError をキャッチして URLurllib.error からのエラーなので、失敗したリクエストによってプログラムがクラッシュすることはありません。
  • 🛠️ ファイルをダウンロードする: urlretrieve() 関数は、 URL 画像、PDF、データセットなどに最適な、ディスクに直接保存する機能。
  • 🤖 AI対応準備完了: urllibは、機械学習モデルやAIパイプラインに供給されるデータセットやAPIデータを取得します。

Python Urllibを使用したインターネットアクセス

以下のセクションでは、urllibとは何か、 URL そして、そのHTMLの読み方、エラーの処理方法、ファイルのダウンロード方法、urllibとrequestsライブラリのどちらを使うかを選択する方法などを学びます。

URLlibとは何ですか?

urllibは Python 開くために使用できるモジュール URLs。これは、 URL 行動。

自律的AI Pythonまた、XML、HTML、JSONなどのインターネット上のデータにアクセスして取得し、そのデータを直接操作することもできます。以下のセクションでは、Webからデータを取得する方法を見ていきます。たとえば、ここでは Guru99ビデオ URL使用するには Pythonそして、このHTMLファイルを印刷します URL.

urllib パッケージには、いくつかのモジュールが含まれています。urllib.request は、ファイルを開くためのものです。 URLs、リクエストが引き起こす可能性のある例外についてはurllib.error、構築と解析についてはurllib.parse URLrobots.txt ファイルを読み込むための s と urllib.robotparser。

開く方法 URL Urllibを使用する

インターネットデータに接続するコードを実行する前に、 URL ライブラリモジュール、または「urllib」。

店は開いています URL Urllibを使用する

  • URLlibをインポートする
  • メイン関数を定義する
  • 変数 webUrl を宣言します
  • 次に、urllibライブラリのurlopen関数を呼び出します。
  • その URL 私たちがオープンするのは Guru99のチュートリアル YouTube
  • 次に、結果コードを出力します。
  • 結果コードは、作成したwebUrl変数に対してgetcode関数を呼び出すことで取得されます。
  • それを文字列に変換し、文字列「結果コード」と連結できるようにします。
  • これは通常のHTTPコード「200」であり、HTTPリクエストが正常に処理されたことを示します。

HTMLファイルを取得する方法 URL in Python

read() 関数を使用して HTML ファイルを読み込むこともできます。 Pythonコードを実行すると、HTMLファイルがコンソールに表示されます。

HTMLファイルから URL in Python

  • webUrl変数に対してread()関数を呼び出します。
  • read() メソッドを使用すると、データファイルの内容を読み込むことができます。
  • 内容全体をお読みください URL データという変数に格納する
  • コードを実行すると、データがHTML形式で出力されます。

完全なコードは次のとおりです。

Python 2例

#  
# read the data from the URL and print it
#
import urllib2

def main():
# open a connection to a URL using urllib2
   webUrl = urllib2.urlopen("https://www.youtube.com/user/guru99com")
  
#get the result code and print it
   print "result code: " + str(webUrl.getcode()) 
  
# read the data from the URL and print it
   data = webUrl.read()
   print data
 
if __name__ == "__main__":
  main()

Python 3例

#
# read the data from the URL and print it
#
import urllib.request
# open a connection to a URL using urllib
webUrl  = urllib.request.urlopen('https://www.youtube.com/user/guru99com')

#get the result code and print it
print ("result code: " + str(webUrl.getcode()))

# read the data from the URL and print it
data = webUrl.read()
print (data)

urllibのエラー処理方法: URLエラーとHTTPエラー

リクエストは必ずしも成功するとは限りません。何らかの問題が発生した場合、urllib はデータを返す代わりに例外を発生させるため、これらのエラーを適切に処理することが重要です。urllib.error モジュールは、主に 2 つの例外クラスを定義しています。

  • HTTPエラー サーバーが404 Not Foundや500 Internal Server Errorなどのエラー状態コードを返した場合に発生します。このイベントには、状態コードとレスポンスボディが含まれます。
  • URLエラー サーバーに全くアクセスできない場合(例えば、ドメイン名が間違っている、インターネット接続がないなど)に発生します。この例外には、失敗の原因を説明するreason属性が含まれています。

HTTPError はサブクラスであるため URLエラーが発生した場合は、常に最初に HTTPError をキャッチして、各エラーの種類を個別に処理するようにしてください。

from urllib.request import urlopen
from urllib.error import HTTPError, URLError

try:
    response = urlopen("https://www.guru99.com/no-such-page.html")
    data = response.read()
except HTTPError as error:
    print("HTTP error:", error.code)
except URLError as error:
    print("URL error:", error.reason)

これらの例外を適切に処理することで、プログラムのクラッシュを防ぎ、問題のログ記録、リクエストの再試行、またはキャッシュされたデータへのフォールバックが可能になります。

ファイルをダウンロードする方法 URL urllibを使用する

を読む URL メモリへの書き込みは小さなページには有効ですが、画像、PDF 文書、データセットの場合は、レスポンスを直接ディスクに保存する方が簡単です。urllib.request モジュールには、これを行うための 2 つの簡単な方法が用意されています。

urlretrieve() 関数は、 URL ローカルファイルに直接、一行で書き込む:

from urllib.request import urlretrieve

urlretrieve("https://www.python.org/static/img/python-logo.png", "logo.png")

さらに細かく制御するには、 URL そして、バイト列を自分で書き込みます。urlopen() はテキストではなくバイト列を返すため、ローカルファイルをバイナリモードで開いてください。

from urllib.request import urlopen

with urlopen("https://example.com/data.zip") as response:
    with open("data.zip", "wb") as file:
        file.write(response.read())

非常に大きなファイルの場合は、response.read(8192) を使用してループ内で読み書きを行い、ファイル全体が一度にメモリに保持されないようにしてください。

urllibとrequestsライブラリの比較 Python

urllib は、 Python 標準ライブラリなので、インストール不要でどこでも動作します。サードパーティ製のrequestsライブラリは標準では組み込まれていませんが、構文が短く読みやすいため、多くの開発者が日常的なHTTP作業に好んで使用しています。

主な違いは次のとおりです。

  • インストール: urllibには以下が同梱されています Python一方、requestsはpipでインストールする必要があります。
  • デコード: urllibは生のバイト列を返すため、それを自分でデコードする必要がありますが、requestsはテキストとJSONを自動的にデコードします。
  • 利便性: requestsライブラリは、セッション、クッキー、カスタムヘッダーをより少ないコードで処理します。
  • 依存関係: urllibは何も追加しないが、requestsは内部的にurllib3に依存している。

依存関係を一切なくしたい場合や、短時間で一度限りのリクエストが必要な場合は、urllibを選択してください。認証、セッション、頻繁なAPI呼び出しを伴う大規模なプロジェクトの場合は、requestsを選択してください。どちらも同じHTTPリクエストを送信するため、どちらを選ぶかは利便性と依存関係の少なさのどちらを重視するかによって決まります。

よくあるご質問

urlopen() は HTTP レスポンス オブジェクト (通常は http.client.HTTPResponse) を返します。read() を呼び出すと生のバイトデータを取得でき、getcode() を呼び出すとステータス コードを読み取ることができ、headers または info() を呼び出すとコンテンツ タイプや長さなどのメタデータを調べることができます。

urllib2 は Python 2。 で Python 3. 再編成されました: その機能は、urllib.request を開くために分割されました URL例外については、s および urllib.error を参照してください。 Code urllib2 用に書かれたコードは、代わりに urllib.request をインポートするように更新する必要があります。

read() は文字列ではなくバイト列を返します。これは、urlopen() が事前にエンコーディングを把握していないためです。decode(“utf-8”) を呼び出すと、これらのバイト列が読みやすいテキストに変換され、HTML または JSON コンテンツを印刷、検索、または解析できるようになります。

Video Cloud Studioで URL urlopen() を使用してバイトを読み込み、デコードしてから、json モジュールを使用して解析します: json.loads(response.read().decode(“utf-8”))。これにより、 Python 辞書やリストを直接使用できる形式で、Web APIを呼び出す際によく用いられます。

を包む URL urllib.request.Request オブジェクトにヘッダーを追加してから、urlopen() にリクエストを渡します。request.add_header(“User-Agent”, “Mozilla/5.0”)。カスタムヘッダーは、サーバーがデフォルトのリクエストをブロックする場合に役立ちます。 Python ユーザーエージェント。

はい。urllibはWeb APIからデータセット、CSVファイル、JSONを取得でき、それらをデコードしてpandasやNumPyに読み込むことができます。これは、機械学習パイプラインにトレーニングデータを取り込むための軽量で依存関係のない方法です。

はい。GitHub Copilot は、urlopen() 呼び出し、Request オブジェクト、try/except エラー処理など、一般的な urllib パターンを自動補完します。定型コードの記述を高速化しますが、それでも検証する必要があります。 URLAIアシスタントが提案する、ヘッダー、例外処理など。

urllib.parse.urlencode() でパラメータをエンコードし、encode() でバイト列に変換してから、urlopen() の data 引数または Request オブジェクトとして渡してください。データを指定すると、urllib は自動的に GET リクエストではなく POST リクエストを送信します。