
Requestsをもう少し詳しく知りたい。

スクレイピングするためには、どこまで知識が必要なの。
スクレイピングで何げなくRequestsを使っているけど、ちゃんと理解してないな。というかた向けに書いた記事です。
Requestsを活用するにあたって必要なHTTPの知識をはじめ、スクレイピングで必要なRequestsの基礎をお伝えします。
1.Requestsの前にまずHTTPを知ろう
いきなり前置きかよ。
と思われたかもしれませんが、Requestsを理解するためにHTTPを知っておくことは必要なので、説明します。
HTTPの正式名称はHypertext Transfer Protocolといい、WebブラウザがWebサーバと通信するための通信プロトコルです。
プロトコルとは手順や約束事のことです。
Webブラウザのようなクライアントが、Webサーバに対して情報提供を要求し、Webサーバが情報をクライアントに送信する。この一連のやりとりにHTTPが使われています。
WebサイトのURLに表示されている“http”は、「このサイトはhttpを使って通信してますよ。」ということを明記しているわけです。
ちなみに”https”は、正式名称がHypertext Transfer Protocol Secureといい、HTTPよりも安全に通信をおこなうことができるプロトコルです。
通信内容を暗号化してやり取りし、第三者による盗み見や書き換えを防ぎます。
HTTPSは、HTTPの安全対策版との解釈でOKで、どちらもインターネットの通信プロトコルと理解しておきましょう。
2.HTTPでやってること
では、HTTPでやってることをざっくり説明します。
Webブラウザがサーバに要求を送るときには、以下の3つの情報を渡しています。
・リクエストライン
HTTPメソッド、Web上の住所と名前、HTTPバージョンを記載。
・リクエストヘッダー
サーバーへの要求あれこれ。使用しているクライアントの情報や、やってほしいことを記載。
・リクエストメッセージボディ
補足情報などを記載。HTTPのメソッドによって記載内容が異なる。
これら3つをひとまとめにして、サーバに要求として渡しています。
渡している内容は、HTTPメソッドによって違います。
HTTPメソッドって何?
となると思いますが、HTTPメソッドとは、クライアントからサーバに対する要求の種類のことをいいます。
例えば、クライアントがサーバにWebページを要求する場合、Getメソッドというものを使います。
種類がいくつかあるので、Getメソッドを含め、代表的なものを紹介します。
・Get
Webサーバに対してURLを指定して、ファイル送信を要求する。
・Post
Webサーバに対して、リクエストメッセージボディに情報を付与して送信する。
・Put
Webサーバにあるファイルの更新、新規作成を要求する。
・Delete
Webサーバにあるファイルの削除を要求する。
HTTPメソッドを使ってWebサーバと情報をやり取りすることで、今我々が目にしているWebページがブラウザ上で見れているわけです。
ただ、Webスクレイピングにおいては、GetとPost以外はほとんど使う機会がありません。(個人的な感覚ですが。)
なので、少なくともGetとPostが理解できれば、PythonのRequestsはすんなり頭に入ると思います。
なぜならば、RequestsはHTTPのリクエストを活用してWebページから情報を取得しているからです。(後述します。)
3.Requestsでできること
RequestsがHTTPのリクエストに対応していることを説明させて頂きました。
なので、RequestsってHTTPのリクエストと考え方は同じなんだなぁ。って頭で読んでいただけると理解していただきやすいかと思います。
実際、Requestsのメソッドを見てみましょう。
・○○.get(url)
クライアントがWebサーバに対して、ファイルを要求(GET)する機能。
・○○.post(url)
クライアントがWebサーバに対して、データを送信する機能。
・○○.put(url)
クライアントがWebサーバに対して、ファイル更新する機能。
・○○.delete(url)
クライアントがWebサーバに対して、ファイル削除する機能。
“url”には、対象となるWebサーバのURLを記述します。
実行すると”200”とかの数字が返ってきますが、これはひらたくいってしまうと、Webサーバのステータス(状態)を教えてくれています。
正確にはこの数字のことをステータスコードといいます。
実際にやってみます。
import requests as r url = 'http://umano-ie.com/racesample/' sample = r.get(url) print(sample) #実行結果 Response [200]
レスポンスのステータスコードが”200”というのは、「リクエストが成功して、情報を返したよ。」という状態です。
ステータスコードは他にもあるので、代表的なものを以下にまとめておきます。
ステータスコード | 意味 |
200 | OK。リクエスト成功 |
201 | Created。リクエストが成功し、新たにリソース(ファイルなど)が作成された。 |
204 | No Content。リクエストは渡ったが、情報が更新されなかった。 |
301 | Moved Permanently。リソースの URL が恒久的に変更された。 |
401 | Unauthorized。クライアントが未承認。 |
404 | Not Found。リクエストしたリソースが見つからない。 |
501 | Not Implemented。サーバがリクエストメソッドに対応していない。(HTTPのバージョンが古い) |
503 | Service Unavailable。サーバが(ダウンしているなどで)処理できない。 |
疎通確認ではこれらのステータスは役に立ちますが、Webスクレイピングにおいては取得したデータのほうが、正直気になりますよね。
そんなときは、text属性を使います。
text属性は、例えばGetメソッドで取得したデータをテキストデータとして取得することができます。
コードは以下のように記述します。(実行結果は、凡長なので割愛します。)
import requests as r url = 'http://umano-ie.com/racesample/' sample = r.get(url) print(sample.text) #テキストデータとして取得
確認していただけると分かると思いますが、ずらっとテキスト形式でWebページの内容が表示されていると思います。
WebスクレイピングではText属性をうまく使ってデータを取得&加工するのがメインですね。
以上がWebスクレイピングにおけるRequestsの使い方です。
まとめ
HTTTPの話から始まり、Requestsの基礎的な知識から使い方まで説明させて頂きました。
HTTPの知識を理解し、GetメソッドとText属性さえ押さえておけば、Webスクレイピングするには十分でしょう。
どちらかというと、取得したデータをスキミングしたり加工するテクニックに時間を割いたほうが良いと筆者は考えます。
「うまのいえ」では、今後もWebスクレイピングのネタを中心にブログを更新していきます。
また、足を運んでいただけると喜びます。
ご清聴ありがとうございました。