認証付き&要クッキーのサイトにログインする

baseurl = "https://trading1.sbisec.co.jp/ETGate/"

def write(str):
	f = open("out.html", "w")
	f.write(str.encode("sjis"))
	f.close()
	
def build_opener_cookie(cj):
	import urllib2
	ch = urllib2.HTTPCookieProcessor(cj)
	opener = urllib2.build_opener(ch)
	return opener

def get_form(opener):
	r = opener.open(baseurl)
	html = r.read().decode("sjis")
	return html

def parse_form(html):
	from BeautifulSoup import BeautifulSoup
	soup = BeautifulSoup(html)
	q = {}

	form = soup.findAll("form")[1]
	for i in form.findAll("input"):
		d = dict(i.attrs)
		t = d["type"]
		if t == "hidden" or t == "text" or t == "password":
			q[d["name"]] = d["value"]
	return q

def login(opener, query):
	import urllib
	query["user_id"] = u"hogehoge"
	query["user_password"] = u"hagehage"
	query = urllib.urlencode(query)
	r = opener.open(baseurl, query)
	html = r.read().decode("sjis")
	return html

def main():
	import cookielib
	cj = cookielib.LWPCookieJar("cookie.txt")
	opener = build_opener_cookie(cj)
	html = get_form(opener)
	q = parse_form(html)
	html = login(opener, q)
	
	write(html)
	cj.save()
	
if __name__=="__main__":
	main()
  • ログインページのformを抽出
  • input要素を抽出してコピー
  • id, passを入れてurlencodeしてpost
  • LWPCookieJarを使うとCookieの内容がファイルとして保存できる