PythonでのWebスクレイピングには「requests」がめっちゃ便利という話

スポンサーリンク

 

 

PythonでWebスクレイピングの勉強をしてるのですが、「requests」という、HTTPライブラリがとても便利だと思ったので備忘録として書いておきます。

 

 

 

HTTPとは?

HTTPとは、Hyper text transfer protocolというインターネットにおいてサーバとクライアント(具体的にはGoogle chromeなどのウェブブラウザ)がHTMLなどのウェブページの情報を送受信するためのルールのことです。

 

 

 →【Web技術】『http://』『www.』とは何なのか?その違いは? – 暇人の研究室

 

 

Hyper Textとは主にHTMLのことを指しており、次のTransferは転送、Protocolは、手順、手続き、といった意味を持つ単語つまり、HTMLの転送手順、などのような意味となります。

 

このhttpは私たちがインターネットを観覧するウェブブラウザの上部にも表示されており一番なじみがあるものだと言えます。

 

そしてウェブブラウザに限らず、プログラムからあるウェブページにアクセスしたい、という場合があります。

 

例えば、最近よく聞く「スクレイピング」「クローラー」というものは、実際にウェブブラウザを立ち上げず(立ち上げるケースもあります)、プログラム上でサーバにリクエストを行い、レスポンスを受け取り、必要なデータだけを高速に抜きだす…といった作業をします。

 

 

 

【Web技術】スクレイピングする上で抑えておきたいHTMLの基本的な仕組み – 暇人の研究室

 

 

 

それによって株価や仮想通貨の価格データを集めることも可能です。

 

 

 

 

 

 

また、APIという、ブラウザではなくプログラムからHTTPリクエストを送ることを前提にしたものもあります。

 

 

 →【Web技術】APIについての分かりやすい解説 – 暇人の研究室

 

 

 

 

Pythonによるウェブスクレイピング

 

CやC+などプログラミング言語はいろいろありますが、Pythonの大きな強みとしてはインターネットを使ったWEBマシーンに開発にとても適しているという点です。

 

その理由の1つにWEBスクレイピングのためのライブラリーが豊富なために知識があまりなくても簡単にWEBスクレイピングができるというものがあります。

 

 

そのWEBスクレイピングのためのライブラリーとして一番便利で有名なのが「request」です。

 

 

 

Webスクレイピングの流れ

 

Webスクレイピングの大まかな流れは以下の3段階です。

 

 

 

①getでサーバにリクエストを行い、レスポンスを受け取る

 

②受け取った(レスポンスされた)データを適当な変数に格納する

 

③.textなどを使って取得したデータをPython上で表示できるようにする

 

 

 

requestのインストール

 

AnacondaでPythonをインストールしている方は import requests でrequestsの機能を有効化できますが、普通にPythonをダウンロードした方はコマンドプロンプトから「requests」をインストールする必要があります。

 

 

コマンドプロンプトの起動方法はホーム画面を開き、プログラム検索でcmd.exeと入力し出てきたものをクリックすると起動します。

 

 

Win10だと↓な感じで出てくると思います。

 

f:id:oruka199665:20180222025247j:plain

 

 

 

Python3以降ををインストールしていると、コマンドプロンプトでpipコマンド使用できるので、pip install requests と入力するとインストールが始まります。

 

 

 

f:id:oruka199665:20180222025347j:plain

 

 

 

 

requestsの使い方

 

 
グーグルのトップページへGETメソッドでリクエストを送りたい場合は、以下のようにします。

 

>>>import requests
>>>r = requests.get(“https://www.yahoo.co.jp/“)

 

 

そして、そのまま変数を呼び出して

 

 

 >>> r
<Response [200]>

 

 

と返ってくれば、Getは成功しています。

 

 

一応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”>

 

 

 

APIで抜き出したデータだとHTMLではなく、JSON形式なのでそれを辞書やリストに変換してあれこれします。

 

 

HTML形式ならば、ここから必要なデータを抜き出すします。

 

 

 

 

PythonでWebスクレイピングする時の知見をまとめておく – Stimulator

 

 

 

 

 

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする