pythonでデータを取得するためのrequestsの使い方

目次

Requestsとは

requsestsはスクレイピングやAPIをたたくときに利用します。
pythonには標準でurllibというライブラリも存在しますが、人間がより理解しやすいように改良されているのがrequestsです。

requestsは標準では入っていないので、pipなのでインストールしてあげる必要はあります。

Requestsで主に使うメソッド

requestsでよく使うメソッドとしては次の4つになります。

  • requests.get()
  • requests.post()
  • requests.put()
  • requests.delete()

今回の記事では基本となるgetをもとにして解説していきます。

requests.get()によるデータの取得

基本の使い方

get()はサーバーから情報を取得するときに使用します。

基本的な書き方は以下の通りです。

import requests

url = 'https://news.yahoo.co.jp/'
r = requests.get(url)
print(r.text)

この例ではYahooニュースのHTML情報が返ってきます。

アクセスするときに別で情報を持たせたいときには引数で渡してあげる必要があるので、そちらも解説します。

【引数】headers:ヘッダー情報

リクエストにHTTPヘッダを追加することができます。
ユーザーエージェントを指定したいときなんかに使いますね。

import requests

url = 'URL'
headers = {
    'user-agent': 'test agent'
}
r = requests.get(url, headers=headers)

【引数】params:URLのクエリパラメータ

URLの後ろに「?」マークがついているようなのを見るかと思います。
その?マーク以降で渡したいデータがあるときにはparamsで渡してあげましょう。

import requests

url = 'URL'
params = {
    'test1': 'sample1',
    'test2': 'sample2'
}
r = requests.get(url, params=params)

【引数】auth:ユーザー情報

サーバーから情報をとる際に、ログインする必要があるパターンがあります。
そんな時にはauthでユーザー名とパスワードなどを渡します。

import requests

url = 'URL'
auth = ('user', 'password')
r = requests.get(url, auth=('user', 'password'))

# ベーシック認証
from requests.auth import HTTPBasicAuth
auth = HttpBasicAuth('user', 'password')
r = requests.get(url, auth=auth)

レスポンスから取れる情報

text:テキスト形式

テキスト形式はスクレイピングする際によく利用します。
スクレイピングでは合わせてBeautifulSoupというライブラリを使うとより便利です。

import requests
from bs4 import BeautifulSoup

url = 'URL'
r = requests.get(url)

text = r.text
soup = BeautifulSoup(text, 'html.parser')

content:バイナリ形式

content形式は画像などの情報をとりたいときに使います。

import requests
from PIL import Image
from StringIO import StringIO

url = 'URL'
r = requests.get(url)

content = r.content
img = Image.open(StringIO(content))

json():json形式

APIの返り値などはjson形式なことが多いです。
そのデータをdataframeなどに入れると後で楽

import requests
import pandas as pd

url = 'URL'
r = requests.get(url)

json_data = r.json()
df = pd.read_json(json_data)

status_code:ステータスコード

リクエストが失敗した時などに処理を分岐する際にstatus_codeを使うとよいです。

import requests

url = 'URL'
r = requests.get(url)

status_code = r.status_code

if status_code != 200:
    # error
else:
    # success

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次