Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonのurllib.requestモジュールを使ってURLにアクセス・データ取得する方法

はじめに

Pythonには、標準ライブラリとしてurllib.requestモジュールが用意されており、これを使うことでURLを開いてインターネット上のリソースにアクセスできます。多くの場合、通信にはHTTPプロトコルが使用されます。

このモジュールのインターフェースは非常にシンプルで、初心者でも学習しやすいのが特徴です。中心となるのはurlopen関数で、さまざまなプロトコルに対応したURLからデータを取得できます。

実際に各機能を使いながら進めていくことで、理解が深まるはずです。それでは始めましょう。

セットアップ

urllibライブラリはPythonに同梱されているため、別途インストールする必要はありません。ただし、何らかの理由で環境に含まれていない場合は、pipパッケージマネージャーを使ってインストールできます。

ターミナルを起動して、以下のコマンドを実行してください。

pip install urllib

インストールが完了したら、必要なモジュールをインポートしてスクリプトの作成を開始できます。

urllib.requestの基本的な使い方

urllib.requestは、URLを開いてデータやページのソースコードを読み取る際によく使われます。特に、APIからデータを取得したい場合に便利です。例を見てみましょう。

import urllib.request
request_url = urllib.request.urlopen('https://official-joke-api.appspot.com/random_ten')

上記のコードでは、ジョークAPIを開き、そのデータを読み込んでいます。

取得した内容を表示したい場合は、次のようにします。

print(request_url.read())

注意:この方法では値がバイト形式で出力されます。プレーンなテキストとして表示したい場合は、decode関数を使用しましょう。

print(request_url.read().decode())

さらに、APIから取得したデータを保存しておき、後から正規表現(RegEx)などで解析して必要な情報だけを取り出すことも可能です。

実践例:APIデータの取得とファイル保存

import urllib.request
data = urllib.request.urlopen('https://official-joke-api.appspot.com/random_ten')
data = data.read().decode()
print(data)
file = open("content.txt", "w+")
file.write(data)
file.close()

注意:アクセスできるプロトコルはHTTPだけではなく、FTPやHTTPSなども含まれます。urlopen関数は、どのプロトコルに対しても同じように動作します。

URLへのデータ送信(POSTリクエスト)

CGI(Common Gateway Interface)を扱っている場合など、URLに対してデータを送信したい場面があるでしょう。これはHTTPにおけるPOSTリクエストと同じ仕組みです。

この操作は、urllib.requestモジュールとurllib.parseモジュールを組み合わせることで実現できます。

まず、必要なモジュールをインポートしましょう。

コード例

import urllib.parse
import urllib.request
url = 'https://www.google.com/cgi-bin/register.cgi'
values = {'name': 'S Vijay Balaji', 'language': 'Python'}
data = urllib.parse.urlencode(values)
data = data.encode('ascii')
req = urllib.request.Request(url, data)
with urllib.request.urlopen(req) as response:
    the_page = response.read()

このコードを実行すると、指定したURLから返されるレスポンス(ソースコード)を読み取ることができます。辞書形式のデータはurlencodeでエンコードし、Requestオブジェクトに渡すのがポイントです。

まとめ

urllib.requestモジュールを使えば、インターネット上のリソースを取得してそこからデータを取り出せるため、非常に有用です。

APIからのデータ解析や、Webページのソースコードを読んでコンテンツをスクレイピングする場合などに活躍します。

実際にurllib.requestを使って複数のAPIからデータを抽出したプロジェクトの例としては、https://github.com/SVijayB/Steam_WebScraper があります。

urllib.requestモジュールには他にもさまざまな関数が用意されています。さらに詳しく知りたい方は、公式ドキュメント(https://docs.python.org/3/library/urllib.request.html)を参照してみてください。

  1. PythonのBokehを使ったデータ可視化の基本ガイド

    Bokehは、Webブラウザ向けに設計されたPythonのデータ可視化ライブラリです。洗練された美しいグラフィックスを簡潔なコードで構築できるのが大きな特徴で、インタラクティブなプロットやダッシュボード、データアプリケーションを素早く簡単に作成できます。本記事では、Bokehを使ってさまざまな種類の基本的なグラフを作成する方法を解説します。 線グラフの描画 線グラフは、各点のx座標とy座標をそれぞれリストとして渡すことで作成できます。図の高さと幅を指定すれば、出力を直接ブラウザに表示することも可能です。さらに、線の太さや色といった追加のパラメータを指定することで、見た目を細かく調整できます。

  2. PythonのpyqrcodeモジュールでQRコードを生成する方法

    QRコードは、白い背景の上に黒い四角形を格子状に配置した2次元コードで、カメラなどの画像読み取り装置によって読み取ることができます。商業用途での在庫追跡や決済、ウェブサイトへのログインなど、スマートフォンユーザー向けのさまざまなアプリケーションで広く利用されています。Pythonではpyqrcodeモジュールを使うことで、簡単にQRコードを生成できます。QRコードには、データを効率的に格納するための4つの標準エンコードモード(数値モード、英数字モード、バイト/バイナリモード、漢字モード)が用意されています。英数字のQRコードを生成するpyqrcodeモジュールには、QRコードを生成するためのc