使用Python中的cookielib模拟登录网站
前面简单提到了Python模拟登录的程序,但是没写清楚,这里再补上一个带注释的Python模拟登录的示例程序。简单说一下流程:先用cookielib获取cookie,再用获取到的cookie,进入需要登录的网站。
#-*-coding:utf-8-*- #!/usr/bin/python importurllib2 importurllib importcookielib importre auth_url='http://www.nowamagic.net/' home_url='http://www.nowamagic.net/'; #登陆用户名和密码 data={ "username":"nowamagic", "password":"pass" } #urllib进行编码 post_data=urllib.urlencode(data) #发送头信息 headers={ "Host":"www.nowamagic.net", "Referer":"http://www.nowamagic.net" } #初始化一个CookieJar来处理Cookie cookieJar=cookielib.CookieJar() #实例化一个全局opener opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cookieJar)) #获取cookie req=urllib2.Request(auth_url,post_data,headers) result=opener.open(req) #访问主页自动带着cookie信息 result=opener.open(home_url) #显示结果 printresult.read()
再附带几个示例程序:
1.使用已有的cookie访问网站
importcookielib,urllib2 ckjar=cookielib.MozillaCookieJar(os.path.join('C:\DocumentsandSettings\tom\ApplicationData\Mozilla\Firefox\Profiles\h5m61j1i.default','cookies.txt')) req=urllib2.Request(url,postdata,header) req.add_header('User-Agent',\ 'Mozilla/4.0(compatible;MSIE6.0;WindowsNT5.1)') opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(ckjar)) f=opener.open(req) htm=f.read() f.close()
2.访问网站获得cookie,并把获得的cookie保存在cookie文件中
importcookielib,urllib2 req=urllib2.Request(url,postdata,header) req.add_header('User-Agent',\ 'Mozilla/4.0(compatible;MSIE6.0;WindowsNT5.1)') ckjar=cookielib.MozillaCookieJar(filename) ckproc=urllib2.HTTPCookieProcessor(ckjar) opener=urllib2.build_opener(ckproc) f=opener.open(req) htm=f.read() f.close() ckjar.save(ignore_discard=True,ignore_expires=True)
3.使用指定的参数生成cookie,并用这个cookie访问网站
importcookielib,urllib2 cookiejar=cookielib.CookieJar() urlOpener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cookiejar)) values={'redirect':",'email':'abc@abc.com', 'password':'password','rememberme':",'submit':'OK,LetMeIn!'} data=urllib.urlencode(values) request=urllib2.Request(url,data) url=urlOpener.open(request) printurl.info() page=url.read() request=urllib2.Request(url) url=urlOpener.open(request) page=url.read() printpage