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

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スクレイピングのためのライブラリーとして一番便利で有名なのが「request」です。

スポンサーリンク

Webスクレイピングの流れ

Pythonでの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

ANACONDA環境だとデフォルトでインストールされているとおもいますが、ない場合はANACONDAプロンプトからPIPでインストールしてください。

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

スクレイピングの主なAPIの紹介やスクレイピング後のデータクリーニングの手法についてはPythonによるスクレイピング&機械学習 開発テクニック BeautifulSoup,scikit-learn,TensorFlowを使ってみよう という参考書がとても分かりやすかったので、この辺で詰まっている方にはオススメです。

プログラミングの独学はとても難しい


プログラミングは小学校の義務教育にも導入され始めており、これから社会人として生きていく上でプログラミングはもはや出来て当たり前、出来なれば論外というエクセルレベルの必須スキルになりつつあります。そしてそういう話を聞いて参考書なりを購入して独学でプログラミング勉強しようと思っている人も少なくないでしょう。しかしプログラミングを独学で勉強し始めようと思うものの



・「分からない箇所で詰まって挫折してしまった」

・「勉強する時間が足りない」

・「ネットの記事だと情報が断片的でよくわからない」

・「コードのエラーの原因が分からない」



という壁にぶち当たって、プログラミングの勉強を止めてしまう方が少なくありません。独学でプログラミングを勉強してる時間のほとんどはつまづいている時間です。実際僕も最初のころ独学でプログラミングを勉強していた頃はエラーの原因が分からず丸1日を不意にしてしまった・・・そんな苦い経験がありました。



それで僕は一度はプログラミングの学習を諦めてしまいましたが、就活で現実を知る中で「プログラミングを勉強して、いずれフリーランスとして自由な生き方がしたい」「エンジニアとして若いうちから高収入を得たい」という気持ちから一念発起して「侍エンジニアのwebサービスコース」に申し込み、プロのエンジニアの方に対面でマンツーマンでPythonによるWebサービス作り方とWeb技術の基本を教えてもらい、ようやくプログラミングが理解でき、今ではエンジニアとしてそこそこの暮らしができるようになりました。





侍エンジニアでは、とりあえずプログラミングやインターネットの基本を知っておきたい人から、HTML・cssなどでWebサイトやWebアプリを作ってみたい人やPythonを勉強してデータサイエンティストやAIエンジニアになりたい人まで幅広いニーズに応えた様々なコースが用意されています。



IT業界と言ってもエンジニアの仕事はプログラミング言語次第でサーバーから機械学習・ディープラーニングまで多種多様ですし、侍エンジニアの無料レッスン(カウンセリング)を受けてみて、自分のやりたいITの仕事は何なのか?を見つけるのがエンジニアへの第一歩になります。ちなみに今侍エンジニアの無料レッスンを受けると1000円分のAmazonギフト券がもらえるので、試しに受けてみるだけもお得です。


自分は半端に独学やオンラインスクールで勉強して金と時間を無駄にするくらいなら、リアルのプログラミングスクールに通ってしっかりプログラミングを勉強した方がいいと思います。ちなみに今、侍エンジニアに申し込むと、25歳以下の学生の方であれば、受講料が20%OFFになるので超お得です。


そして、プログラミングは大勢で授業を受けたり漫然とオンライン学習をするよりも自分が分からない箇所をピンポイントでプロの講師に直接質問して、ちゃんと納得するというスタイルの方がお金は確かに少し掛かりますが、独学で学ぶよりも絶対にモノになります。


シェアする

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

フォローする