browsercookiejar: ブラウザのCookieをPythonから利用する
ウェブスクレイピングの記事を書きましたが、ログインが必要なページから情報を取得するには一工夫する必要があります。
ウェブページでログインしてコンテンツを切り替える場合はCookieが使われます。ウェブサービスにログインするとサーバーからセッションIDが送られてきて、ブラウザがそれをCookieに保存し、新たなページを開くたびにセッションIDをサーバーへ送信しています。サーバーはブラウザが送ってきたセッションIDでログインしたユーザーか判断しています。
PythonにもCookieを扱う機能は含まれており、cookielib
モジュールがCookieを保存する機能を担っています。CookieJar
をセットしてurllib2
モジュールなどを使ってログインした後、必要なページにアクセスすればログインした状態でダウンロードできます。
ただし、ログインするプロセスをPythonでもしっかり再現しなくてはなりません。ユーザー名・パスワードをPOSTで投げるだけでログインできるシステムは比較的簡単ですが、ネットバンキングなどログイン手順が複雑なものや同時ログイン数が制限されているシステムなどでは不便です。そこで、ブラウザが保存しているCookieをPythonから読み込み、セッションIDが入手できればスクレイピングがはるかに簡単になります。
というわけで、browsercookiejarというパッケージを作りました。Windows/Linux環境下のChrome、Firefox、InternetExplorerに対応したCookieJarを含んでいます。Macはテストできる環境がないので対応していません。
使用例は以下のようになります。
import re
import urllib2
import browsercookiejar
cj = browsercookiejar.ChromeCookieJar()
cj.load()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
body = opener.open('http://www.google.com').read()
account = re.search(r'>([^>]+@gmail.com)', body).group(1)
print 'Your account is', account
この例ではChromeのCookieを読み込んでGoogleにアクセスし、ログイン中のアカウント名を取得しています。