【Pythonスクレイピング入門】Requestsモジュールを使ったHTTPリクエスト



必要なもの

  • requests

Pythonスクレイピングライブラリはいくつかあり、標準でもurllibというのが搭載されています。とりあえず手軽なこともあり、標準のurllibよりrequestsの方が色々使いやすいのでこっちをオススメします。Anacondaをインストールしている場合は最初から入っていますがそうでない場合はpipからインストール可能ですので、ご用意ください。

$ sudo pip install requests

これで一発インストールOK

requestsの基本構文

requestsでは様々なHTTPリクエストをかけることができます。

よく使うのはgetやpostですがheadやput、deleteなども可能です。使った記憶はないですが。

今回は入門編ということでgetリクエストを送ってみます。

構文

基本の構文は以下の通り。

requests.get(url(,params))

必須の引数はURLのみでその他のパラメータは省略可能です。

その他パラメータ例

  • proxies
  • headers

実践

HTTPリクエストを送ってみる

import requests

url='https://www.yahoo.co.jp'
res=requests.get(url)

たった3行です。

超簡単ですね。

上記コード実行で res という変数にreqeustsのレスポンスのオブジェクトが格納されています。

上記例のコードではヤフーのトップページにアクセスしています。

res変数の中身を色々見ていきましょう。

レスポンス

下記は対話式で実行していますので、printは省略されています。

res
Out: <Response [200]>

レスポンスオブジェクト単体を出力するとステータスが返ってきます。

ちなみにこれをif文に渡すとTrueになります。500台や400台のステータスの場合はFalseとなります。

res.status_code
Out: 200

.status_codeを付けるとコードの数字のみがint型で返ってきます

res.headers
Out: {'Date': 'Sun, 03 Mar 2019 19:58:52 GMT', 'P3P': 'policyref="http://privacy.yahoo.co.jp/w3c/p3p_jp.xml", CP="CAO DSP COR CUR ADM DEV TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE GOV"', 'X-Content-Type-Options': 'nosniff', 'X-XSS-Protection': '1; mode=block', 'X-Frame-Options': 'SAMEORIGIN', 'Vary': 'Accept-Encoding', 'Content-Encoding': 'gzip', 'Expires': '-1', 'Pragma': 'no-cache', 'Cache-Control': 'private, no-cache, no-store, must-revalidate', 'Content-Length': '4937', 'Content-Type': 'text/html; charset=UTF-8', 'Age': '0', 'Connection': 'keep-alive', 'Via': 'http/1.1 edge1678.img.bbt.yahoo.co.jp (ApacheTrafficServer [c sSf ])', 'Server': 'ATS', 'Set-Cookie': 'TLS=v=1.2&r=1; path=/; domain=.yahoo.co.jp; Secure'}

.headersでレスポンスヘッダを返します。

res.text
Out: '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">n<html>n<head>n<meta http-equiv="content-type" content="text/html; charset=utf-8">n<meta http-equiv="content-style-type" content="text/css">n<meta http-equiv="content-script-type" content="text/javascript">n<meta name="description" content="日本最大級のポータルサイト。検索、オークション、ニュース、メール、コミュニティ、ショッピング、など80以上のサービスを展開。あなたの生活をより豊かにする「ライフ・エンジン」を目指していきます。">n<meta name="robots" content="noodp">n<meta name="google-site-verification"...以下省略

.textでhtmlの中身を丸ごとstr型で返します。

res.content
Out: b'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">n<html>n<head>n<meta http-equiv="content-type" content="text/html; charset=utf-8">n<meta http-equiv="content-style-type" content="text/css">n<meta http-equiv="content-script-type" content="text/javascript">n<meta name="description" content="xe6x97xa5xe6x9cxacxe6x9cx80xe5xa4xa7xe7xb4x9axe3x81xaexe3x83x9dxe3x83xbcxe3x82xbfxe3x83xabxe3x82xb5xe3x82xa4xe3x83x88xe3x80x82xe6xa4x9cxe7xb4xa2xe3x80x81xe3x82xaaxe3x83xbcxe3x82xafxe3x82xb7xe3x83xa7xe3x83xb3xe3x80...以下省略

一見 .text と同じように見えますが、途中から、よくわからない文字列になってます。.contentはhtmlの中身をbytes型で返します。

まとめ

なんかスゲー簡単に、スゲー色々出来そう感が伝わればOKです。

次の記事