最近PythonでWebスクレイピングの勉強をしてるのですが、「requests」という、HTTPライブラリがとても便利だと思ったので備忘録として書いておきます。
HTTPとは?
HTTPとは、Hyper text transfer protocolというインターネットにおいてサーバとクライアント(具体的にはGoogle chromeなどのウェブブラウザ)がHTMLなどのウェブページの情報を送受信するためのルールのことです。
Hyper Textとは主にHTMLのことを指しており、次のTransferは転送、Protocolは、手順、手続き、といった意味を持つ単語つまり、HTMLの転送手順、などのような意味となります。
このhttpは私たちがインターネットを観覧するウェブブラウザの上部にも表示されており一番なじみがあるものだと言えます。そしてウェブブラウザに限らず、プログラムからあるウェブページにアクセスしたい、という場合があります。
例えば、最近よく聞く「スクレイピング」「クローラー」というものは、実際にウェブブラウザを立ち上げず(立ち上げるケースもあります)、プログラム上でサーバにリクエストを行い、レスポンスを受け取り、必要なデータだけを高速で抜きだす…といった作業をさします。
そこにAPIという、ブラウザではなくプログラムからHTTPリクエストを送ることを前提にしたスクレイピングを簡単にしてくれるものを使うと株価や仮想通貨の価格データ・商品の購買データや天気情報などのいろいろな情報を集めて分析することが可能です。
Pythonによるウェブスクレイピング
CやC+などプログラミング言語はいろいろありますが、Pythonの大きな強みとしてはインターネットを使ったWEBマシーンに開発にとても適しているという点です。
その理由の1つにWEBスクレイピングのためのライブラリーが豊富なために知識があまりなくても簡単にWEBスクレイピングができるというものがあります。そのWEBスクレイピングのためのライブラリとして一番便利で有名なのが「requests」です。
Webスクレイピングの流れ
PythonでのWebスクレイピングの大まかな流れは以下の3段階です。
- getでサーバにリクエストを行い、レスポンスを受け取る
- 受け取った(レスポンスされた)データを適当な変数に格納する
- textなどを使って取得したデータをPython上で表示できるようにする
requestsのインストール
AnacondaでPythonをインストールしている方は import requests
でrequestsの機能を有効化できますが、普通にPythonをダウンロードした方はコマンドプロンプトから「requests」をインストールする必要があります。
コマンドプロンプトの起動方法はホーム画面を開き、プログラム検索でcmd.exeと入力し出てきたものをクリックすると起動します。Win10だと↓な感じで出てくると思います。
Python3以降ををインストールしていると、コマンドプロンプトでpipコマンド使用できるので、pip install requests
と入力するとインストールが始まります。
ANACONDA環境だとデフォルトでインストールされているとおもいますが、ない場合はANACONDAプロンプトからPIPでインストールしてください。
requestsの使い方
グーグルのトップページへGETメソッドでリクエストを送りたい場合は、以下のようにします。
# ライブラリの読み込み import requests # リクエストを送ってレスポンスを変数rに保存する r = requests.get("https://www.yahoo.co.jp/")
そして、そのまま変数rを呼び出して、 <Response [200]>と返ってきていれば、リクエストは成功しています。
404など200以外のコードが返ってきている場合は基本的に失敗しています。一応WEBサーバーからのリクエスト状態にはいろいろ種類があって
- 200→なんの問題なしOK
- 403→アクセスが拒否
- 404→ページが存在しない
- 500~502→サーバーに問題がありレスポンスが返せない
- 503→サーバーメンテ
ってな感じで種類があります。getでデータが取れてないってときはこのレスポンスがちゃんと200で帰ってきているかも確認してみてください。そして、Text形式にして引っ張ったデータをPython上で表示させてみます。
# レスポンスをテキスト形式で表示 print(r.text)
<実行結果>
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd“>
<html>
<head>
<meta http-equiv=”content-type” content=”text/html; charset=utf-8″>
<meta http-equiv=”content-style-type” content=”text/css”>
<meta http-equiv=”content-script-type” content=”text/javascript”>
<meta name=”description” content=”日本最大級のポータルサイト。検索、オークション、ニュース、メール、コミュニティ、ショッピング、など80以上のサービスを展開。あなたの生活をより豊かにする「ライフ・エンジン」を目指していきます。”>
<meta name=”robots” content=”noodp”>
<meta name=”google-site-verification” content=”fsLMOiigp5fIpCDMEVodQnQC7jIY1K3UXW5QkQcBmVs”>
基本的にスクレイピングしてきたデータはこんな感じでHTML形式で返されてきます。ここから欲しい情報だけを抽出するには「BeautifulSoup」というライブラリを使用します。
関連記事:【Python】「Beautiful Soup」でスクレイピングしたhtmlデータを解析する
APIで抜き出したデータだとHTMLではなく、JSON形式なのでそれを辞書やリストに変換してあれこれします。
関連記事:【Python】TwitterのAPIを簡単操作できる「Tweepy」の使い方
関連記事:【Python】CoinGeckoのAPIからビットコイン・アルトコインの価格データを取得する
終わり
以上がrequestsを用いた基本的なスクレイピングになります。Pythonのwebスクレイピングよく使われる主なAPIの紹介やスクレイピング後のデータクリーニングの手法については、以下のPythonによるスクレイピング&機械学習 開発テクニック」という参考書がとても分かりやすかったので、この辺で詰まっている方には非常にオススメです。
コメント
[…] 関連記事:【Python】requestsを使ってWebサイトの情報をスクレイピングして自動収集する […]