PythonでCookieを使ってWebサイトにログイン
相変わらずスクレイピングの勉強中。
参考サイト
Python2とPython3でHTTP POST+Cookie処理の比較 - yattの日記
Python | saito's memo
urllib2でCookieを使う - ひきメモ
Python3でニコニコ動画にログインして自分で投稿した動画を保存してみた。虚しい。
from urllib.request import build_opener, HTTPCookieProcessor from urllib.parse import urlencode, parse_qs from http.cookiejar import CookieJar from lxml.html import fromstring # Cookie利用opener opener = build_opener(HTTPCookieProcessor(CookieJar())) encoding = 'utf_8' # Webサイトの文字コード post = { 'mail_tel': '****@gmail.com', 'password': '********' } data = urlencode(post).encode('utf_8') # ログインCookieを取得 response = opener.open('https://secure.nicovideo.jp/secure/login', data) # レスポンスの読込、保存 # with open('out.html', 'w', encoding=encoding) as f: # f.write(response.read().decode(encoding)) response.close() # FLVファイルのURLを取得 video_id = 'sm22328060' with opener.open('http://www.nicovideo.jp/api/getflv?v=' + video_id) as response: flv_url = parse_qs(response.read().decode(encoding), encoding=encoding)['url'][0] # 動画ページのCookieを取得(FLVファイルのダウンロードに必要) # ついでにタイトルを取得 with opener.open('http://www.nicovideo.jp/watch/' + video_id) as response: doc = fromstring(response.read().decode(encoding)) title = doc.head.find('title').text.split(' - ')[0] # ファイル名に使えない記号を削除 for c in '\/?:*"><|': title = title.replace(c, '') # ファイルをダウンロード with open(title + '.flv', 'wb') as f: with opener.open(flv_url) as response: f.write(response.read())
他のサイトでも上のコードのpostの中身が違うだけでログインまでの流れは概ね同じっぽいけど、Amazonでは「Cookieを有効にしろ」と言われてログインできなかった。HTMLのことがまだよく分かってない。