はじめる
pythonのrequestsとBeautifulSoupというライブラリを使って、スクレイピングをすることがたまにあります。
中でも、ユーザー認証のあるサイトで、ログインしないと取りたい情報にアクセスできないような場合は、セッションを作り、ログイン情報をPOSTして、cookieとして保存するわけです。
しかし、cookieは一度つくったら何ヶ月か有効らしいので、いちいち取得し直すのは無駄なような気がする。
ということで、cookieをローカルファイルに保存しておいて、普段はそれを参照する形にしましょう。
requestsのセッションの場合、cookieは辞書になっていて、以下のように呼び出せる
import requests
s = requests.session()
#~
#ログイン処理
#~
s.cookies#これ
またpythonでオブジェクトをローカルに保存するには、pickleというライブラリがあり、これが便利。
import pickle
with open('cookie.dump', 'wb') as f:
pickle.dump(s.cookies, f)
ちなみにwith
は、中の処理が終わったあと自動でファイルをcloseしてくれるものらしい。
そして、呼び出すときは
with open('cookie.dump', 'rb') as f:
c = pickle.load(f)
s = requests.session()
s.cookies.update(c)
とすればいい。
あと、書き込む時も読み出す時も、バイナリー?を使うので、単に’w’,‘r’でなく、‘wb’,‘rb’でないといけないらしい。
おわり
requestsだけ使うんだったら毎回ログイン処理してもいいんだけど、動的サイトでseleniumも使わないといけない時とかブラウザ開いてログインして閉じてっていうのが結構時間かかるんですよね。
なので、毎日とか、割と頻繁に走らせるときにはこうするといいのではないでしょうか。