目次
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