【Pythonテクニック習得編】インターネットの世界にダイビング【Requestsモジュールの最も簡単な使い方】

ぺんぺん
Pythonでネットからデータを取得することができるって本当?

 

ケンケン
うん、できるよ!

 

ぺんぺん
できるんだ!でも難しいんでしょ?
ケンケン
そんなことないよ。ライブラリを使えば意外に簡単にできるんだ!
ぺんぺん
じゃあ教えて!
ケンケン
了解!それじゃいってみよう!

 

 

 

 

Requestsモジュールをインストールしよう

ネット上からデータを取得するためのライブラリにRequestsがあります。

 

まずは、このRequestsをインストールするところからご紹介します。

コマンドプロンプトを起動させて以下のようにコマンドを実行しましょう。

コマンドプロンプトが発見できない方は、Windowsの検索機能を使いましょう。

 

▶Requestsライブラリをインストール

py -m pip install requests

先頭の「py -m 」はWindows専用のコマンドですが、もし上記コードでエラーが出るようでしたら「pip」からコマンドを始めてください。

 

ちなみに、ライブラリがインストールされているか確認したいときは以下のようにコマンドを打ちます。

▶ライブラリの確認方法

py -m pip list

 

Getリクエストでデータを取得しよう

百聞は一見に如かず、ということで早速ネットにアクセスしてデータを取得してみましょう。

日本人にとっておなじみのyahooのトップページのデータにアクセスしてみます。

▶Yahoo!のデータを取得しテキストデータを表示

import requests
res = requests.get('http://www.yahoo.co.jp')
print(res.text)

 

なんとたった3行のコードでネットにアクセスしデータを取得することができちゃいます。

このコードを実行すると以下のようにWEBページデータを取得できます。

ごちゃごちゃして分かりづらいかもしれませんが、赤枠で囲った個所をご覧いただくと、Yahooにアクセスしてデータを取得できたようですね。

「<!DOCTYPE HTML PUBLIC~」から始まって「</html>」で終わります。おそらく数百行に渡るはずです。

 

HTTP通信とはなんだろう?

ここでHTTP通信について少しお話しておきます。

先ほど、3行のコードでWEBデータを取得することに成功しましたが、その際に使ったのがGETリクエストというHTTP通信の方法だったのです。

 

HTTP通信とは、簡単に言うとブラウザとサーバーのデータのやり取りをするときの約束事のことです。

もう少し詳しく説明します。

まず、ブラウザを簡単に説明するとInternet ExplorerやGoogle Chromeなどのことです。

もっと、かみ砕くとWEBページを見るためのツール(ソフト)のことです。

一方サーバーはWEBページが置いてある場所(PC)のことです。

 

ブラウザから見たいWEBページのURLをサーバーに送信し、受け取った情報をファイル形式でブラウザに返してあげて画面に表示する仕組みです。

しかし、このとき送った側ともらった側でデータの形式が違ったら間違った情報や読み取れない情報が戻ってきてしまいます。

 

例えるなら、日本語と英語でやり取りしたら間違いが起こりやすいですね。

どちらかの言語に統一するか通訳を交える必要があります。

WEB上でも同じことが起こりえます。

そこで、データのやり取りをするときは言語を統一しましょう、という考え方がHTTP通信だと思ってください。

 

HTTP通信のおかげでユーザーは欲しい情報にアクセスし閲覧やデータ入力などができるのです。

 

以下ブラウザとサーバーの通信の順番を簡単にまとめておきます。

▶ブラウザとサーバー間でのやり取り

  1. (ブラウザー側)URLを指定しサーバーにGETリクエスト送信
  2. (サーバー側)受け取ったリクエストを解析し必要なデータをブラウザーに返信(レスポンス)
  3. (ブラウザー側)返信されたデータをHTML形式で画面に表示させる

これで流れはつかめると思います。

①のGETリクエストはWEBページのデータを「そのままください」というお願いだと思ってください。

ちなみに、データの修正や削除を行える方法をPOSTリクエストと呼んでいます。

 

今回は、データを取得するGETリクエストを以下の書式に従って使っています。

▶Getリクエスト(メソッド)の書式

変数 = requests.get(‘リクエストを送るURL’)

 

帰ってきたデータからプロパティを取り出してみよう

レスポンスされたデータはResponseオブジェクトとして生まれ変わり、そこにさまざまな情報が格納されます。

その情報を以下にまとめます。

 

プロパティ 内容
url アクセスしたURLを取得
status_code ステータスコードの取得
headers ヘッダー情報
encoding エンコード方法
text メッセージ部分

主に上記の情報を取得することができます。

textプロパティはすでにお見せしたのでそれ以外を実際にコードを書いて実行してみましょう。

▶urlプロパティ

print(res.url)
#https://www.yahoo.co.jp/

urlプロパティはアクセスしたアドレスを表示してくれます。

意図したアドレスにリクエストが送信できていたか確認するときに役立ちます。

※最初に書いたコードの3行目以降に追加してください。

 

▶status_codeプロパティ

print(res.status_code)
#200

ステータスコードとは、簡単にいうとレスポンスの状態のことです。

数字で状態を知らせてくれます。

処理が成功していれば200番台が返されます。

▶ステータスコードの分類

  • 100番台 : 処理の途中
  • 200番台 : 処理成功
  • 300番台 : リダイレクト
  • 400番台 : クライアントでエラー発生
  • 500番台 : サーバでエラー発生

分類は以上のようになっていますので参考までに確認しておいてください。

 

▶headersプロパティ

print(res.headers)

 

ヘッダーの情報も取り出せました。

 

▶encodingプロパティ

print(res.encoding)
#UTF-8

UTF-8という文字コードで書かれているよ、という回答が得られました。

なお、文字コードについては説明すると長くなってしまうので割愛します。

簡単に言うと、文字コードは人間が使う文字をPCが理解できるように変換するための対応表のようなもので、UTF-8はその一種だと思ってください。

 

まとめ

いかがでしたか?

なんとたった3行のコードでWEB上からデータを取得することができました。

その上、取得したデータの状態をのぞき見ることもできましたね。

Pythonのライブラリは威力がありますね。

もちろん、工夫次第で欲しい情報をリスト形式で一覧にまとめることも可能ですし、応用はいくらでも効きます。

 

これを機会に次のステップに進んでいただけると幸いです。

それでは、また次回お会いしましょう。

 

おすすめ記事

関連記事

ケンケン みなさん、こんにはケンケンです。 ぺんぺん ぺんぺんです。 ケンケン やあ、ぺんぺん。ぺんぺんはPythonでエクセルを操作できるって知ってた? ぺんぺん […]

 


ぺんぺん
本当に簡単にWEBデータを取得できた!
ケンケン
そうでしょ!ブラウザとサーバーの関係を理解しておくとWEBアプリを作るときに助けになるよ
ぺんぺん
しっかり復習しておかなくちゃ

 

ケロ
そうそう!ビールとサーバーについてしっかり復習しなくちゃ

 

ぺんぺん
そっちのサーバー!!!!