Pythonのurllibモジュールの使い方|HTTPのリクエストやレスポンスを解析する方法

スポンサーリンク

こんにちは、Python 3 チュートリアルの記事へようこそ。

今回は、標準のライブラリモジュールの一部であるPythonのurllibライブラリについて説明します。

Python urllibのアイデアは、簡単なプログラミングでインターネットが可能にするあらゆる種類の素晴らしいことをできるようにするということです。

それでは、さっそく始めてみましょう。

スポンサーリンク

Python の urllib をインポートする

最初にやらなければならないことは、URLlib をインポートすることです。

Python 2.7から来た人は、単にurllibをインポートすることに慣れたと思います。

import urllib

一方、Python 3 以降では、urllib から request パッケージをインポートする必要があります。

import urllib.request

Python urllib モジュールを使ってウェブサイトにアクセスする

つまり、Webサイトにアクセスする例は以下のようになります。

1. GET ウェブサイトにアクセスするためのリクエスト

x = urllib.request.urlopen('https://www.google.com')

変数xを定義してurlopenメソッドを呼び出し、Webサイトのurlを指定することにします。

これで、URLからデータを取得するためのHTTP GETリクエストとなります。

データを取得するためにread()を使用します。

print(x.read())

上記のコードでは、google.comというページのソースコードを返しています。

これは、htmlタグやスタイリング属性など、ページのすべての内容をpythonコンソール上に返します。

しかし、ユーザーとしては、ページのソースコードを取得することに興味がなく、テキストデータのみを必要とする場合があります。

https://www.python.org/search/?q=urllib&submit=

通常のユーザーであれば、python.orgなどのウェブサイトの検索バーにアクセスし、検索したい内容を指定して送信ボタンをクリックします。

このとき、アドレスバーのURLが以下のように変化していることに気がつきます。

このURLには、クエリパラメータである「?」と「&」がいくつか含まれています。

import urllib.request as rq
import urllib.parse as ps

と「&」は、検索バーで入力した検索クエリであり、これがURLに書き込まれます。

このURLにPOSTリクエストを送ると、コンテンツを取得することができます。

2. Web サイトにアクセスするための POST リクエスト

リクエストモジュールとは別に、リクエストの値を解析するのに役立つparseモジュールもインポートします。

url='https://www.python.org/search/'
dictionary = { 'q': 'urllib' }
 
data = ps.urlencode(dictionary)
data = data.encode('utf-8')
 
req = rq.Request(url,data)
res = rq.urlopen(req)
 
print(res.read())

POST リクエストをよりよく理解するために、python.org のウェブサイトを使用することにします。

辞書を定義し、キーは「検索パラメータ」、値は「キーワード」とします。

Output Get Request
Output Get Request

urlパラメータを指定した後、ワールドワイドウェブがutf-8の標準的なエンコーディングを使用していることを理解することが重要です。

したがって、我々は、エンコードされたコンテンツに私たちのURLを変換します。

次に、URLとエンコードされたデータをreqオブジェクトに渡し、これに対してurlopenリクエストを発行します。

urlopenのレスポンスはresオブジェクトに格納されます。

Image 18
Output POST

これは、今回掲載したウェブサイトが、APIを使用せずにコンテンツにアクセスすることを許可していないためです。

RESTFUL APIや他の特定のHeaderを使用してデータを取得することができます。

この記事では、これについては説明しません。

それでも、すべての HTML タグを含むウェブページ全体を Python コンソールに取り込むことができます。

まとめ

Python を使ってブラウザやサイトに HTTP GET と HTTP POST リクエストを発行する方法を理解していただけたでしょうか?コメント欄でご意見をお聞かせください。

また、他に読みたいトピックがあればご記入ください。

タイトルとURLをコピーしました