python获取cookie后怎么模拟登陆网站 python爬虫requests实现模拟登陆怎么获取cook...
\u8bf7\u6559Python\u6a21\u62df\u767b\u5f55\u7f51\u7ad9\uff0ccookie\u5904\u7406\u95ee\u9898cookie_use = cookielib.CookieJar()handler = urllib2.HTTPCookieProcessor(cookie_use)opener = urllib2.build_opener(handler)urllib2.install_opener(opener)
\u4ee5\u524d\u6709\u8fc7\u7c7b\u4f3c\u7684\u95ee\u9898 \u53ef\u4ee5\u53c2\u8003\u4e0b\uff1a
http://blog.csdn.net/c406495762/article/details/69817490
运行平台:Windows
Python版本:Python3.x
IDE:Sublime text3
一、为什么要使用Cookie
Cookie,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。
比如说有些网站需要登录后才能访问某个页面,在登录之前,你想抓取某个页面内容,登陆前与登陆后是不同的,或者不允许的。
使用Cookie和使用代理IP一样,也需要创建一个自己的opener。在HTTP包中,提供了cookiejar模块,用于提供对Cookie的支持。
http.cookiejar功能强大,我们可以利用本模块的CookieJar类的对象来捕获cookie并在后续连接请求时重新发送,比如可以实现模拟登录功能。该模块主要的对象有CookieJar、FileCookieJar、MozillaCookieJar、LWPCookieJar。
它们的关系: CookieJar–派生–>FileCookieJar–派生–>MozillaCookieJar和LWPCookieJar
工作原理:创建一个带有cookie的opener,在访问登录的URL时,将登录后的cookie保存下来,然后利用这个cookie来访问其他网址。查看登录之后才能看到的信息。
同样,我们以实例进行讲解,爬取伯乐在线的面向对象的漂亮MM的邮箱联系方式。
二、实战
1.背景介绍
在伯乐在线有这么一个有趣的模块,面向对象,它说白了就是提供了一个程序员(媛)网上相亲的平台。
URL:
它的样子是这样的:
可以看到,这里有很多的相亲贴,随便点进去就会有网上相亲MM的详细信息,想获取MM的联系方式,需要积分,积分可以通过签到的方式获取。如果没有登陆账户,获取联系方式的地方是这个样子的:
如果登陆了账号,获取联系方式的地方是这个样子的:
想要爬取MM的联系邮箱,就需要用到我们本次讲到的知识,Cookie的使用。当然,首先你积分也得够。
在讲解之前,推荐一款抓包工具–Fiddler,可以在Google Chrome的Google商店下载这个插件,它的样子是这样的:
可以看到,通过这个插件,我们可以很容易找到Post的Form Data等信息,很方便,当然也可以用之前讲得浏览器审查元素的方式查看这些信息。
2.过程分析
在伯乐在线首页点击登陆的按钮,Fiddler的抓包内容如下:
从上图可以看出,真正请求的url是
Form Data的内容记住,这些是我们编程需要用到的。user_login是用户名,user_pass是用户密码。
在点击取得联系邮箱按钮的时候,Fiddler的抓包内容如下:
从上图可以看出,此刻真正请求的url是
同样Form Data中内容要记下来。postId是每个帖子的id。例如,打开一个相亲贴,它的URL是28/,那么它的这个postId就是4128。为了简化程序,这里就不讲解如何自动获取这个postId了,本实例直接指定postId。如果想要自动获取,可以使用beautifulsoup解析/返回的信息。beautifulsoup的使用。有机会的话,会在后面的爬虫笔记中进行讲解。
3.测试
1)将Cookie保存到变量中
首先,我们先利用CookieJar对象实现获取cookie的功能,存储到变量中,先来感受一下:
# -*- coding: UTF-8 -*-from urllib import requestfrom http import cookiejarif __name__ == '__main__': #声明一个CookieJar对象实例来保存cookie
cookie = cookiejar.CookieJar() #利用urllib.request库的HTTPCookieProcessor对象来创建cookie处理器,也就CookieHandler
handler=request.HTTPCookieProcessor(cookie) #通过CookieHandler创建opener
opener = request.build_opener(handler) #此处的open方法打开网页
response = opener.open('httdu.com') #打印cookie信息
for item in cookie:
print('Name = %s' % item.name)
print('Value = %s' % item.value)1234567891011121314151617
我们使用以上方法将cookie保存到变量中,然后打印出了cookie中的值,运行结果如下:
2)保存Cookie到文件
在上面的方法中,我们将cookie保存到了cookie这个变量中,如果我们想将cookie保存到文件中该怎么做呢?方便以后直接读取文件使用,这时,我们就要用到FileCookieJar这个对象了,在这里我们使用它的子类MozillaCookieJar来实现Cookie的保存,编写代码如下:
# -*- coding: UTF-8 -*-from urllib import requestfrom http import cookiejarif __name__ == '__main__': #设置保存cookie的文件,同级目录下的cookie.txt
filename = 'cookie.txt'
#声明一个MozillaCookieJar对象实例来保存cookie,之后写入文件
cookie = cookiejar.MozillaCookieJar(filename) #利用urllib.request库的HTTPCookieProcessor对象来创建cookie处理器,也就CookieHandler
handler=request.HTTPCookieProcessor(cookie) #通过CookieHandler创建opener
opener = request.build_opener(handler) #此处的open方法打开网页
response = opener.open('h.com') #保存cookie到文件
cookie.save(ignore_discard=True, ignore_expires=True)123456789101112131415161718
cookie.save的参数说明:
ignore_discard的意思是即使cookies将被丢弃也将它保存下来;
ignore_expires的意思是如果在该文件中cookies已经存在,则覆盖原文件写入。
- # -*- coding: UTF-8 -*-from urllib import requestfrom http import cookiejarif __name__ == '__main__': #设置保存cookie的文件的文件名,相对路径,也就是同级目录下
- filename = 'cookie.txt'
- #创建MozillaCookieJar实例对象
- cookie = cookiejar.MozillaCookieJar() #从文件中读取cookie内容到变量
- cookie.load(filename, ignore_discard=True, ignore_expires=True) #利用urllib.request库的HTTPCookieProcessor对象来创建cookie处理器,也就CookieHandler
- handler=request.HTTPCookieProcessor(cookie) #通过CookieHandler创建opener
- opener = request.build_opener(handler) #此用opener的open方法打开网页
- response = opener.open('httcom') #打印信息
- print(response.read().decode('utf-8'))12345678910111213141516171819
- # -*- coding: UTF-8 -*-from urllib import requestfrom urllib import errorfrom urllib import parsefrom http import cookiejarif __name__ == '__main__': #登陆地址
- login_url = 'hin/admin-ajax.php'
- #User-Agent信息
- user_agent = r'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36'
- #Headers信息
- head = {'User-Agnet': user_agent, 'Connection': 'keep-alive'} #登陆Form_Data信息
- Login_Data = {}
- Login_Data['action'] = 'user_login'
- Login_Data['redirect_url'] = 'hobbole.com/'
- Login_Data['remember_me'] = '0' #是否一个月内自动登陆
- Login_Data['user_login'] = '********' #改成你自己的用户名
- Login_Data['user_pass'] = '********' #改成你自己的密码
- #使用urlencode方法转换标准格式
- logingpostdata = parse.urlencode(Login_Data).encode('utf-8') #声明一个CookieJar对象实例来保存cookie
- cookie = cookiejar.CookieJar() #利用urllib.request库的HTTPCookieProcessor对象来创建cookie处理器,也就CookieHandler
- cookie_support = request.HTTPCookieProcessor(cookie) #通过CookieHandler创建opener
- opener = request.build_opener(cookie_support) #创建Request对象
- req1 = request.Request(url=login_url, data=logingpostdata, headers=head) #面向对象地址
- date_url = 'htt/wp-admin/admin-ajax.php'
- #面向对象
- Date_Data = {}
- Date_Data['action'] = 'get_date_contact'
- Date_Data['postId'] = '4128'
- #使用urlencode方法转换标准格式
- datepostdata = parse.urlencode(Date_Data).encode('utf-8')
- req2 = request.Request(url=date_url, data=datepostdata, headers=head) try: #使用自己创建的opener的open方法
- response1 = opener.open(req1)
- response2 = opener.open(req2)
- html = response2.read().decode('utf-8')
- index = html.find('jb_contact_email') #打印查询结果
- print('联系邮箱:%s' % html[index+19:-2]) except error.URLError as e: if hasattr(e, 'code'):
- print("HTTPError:%d" % e.code) elif hasattr(e, 'reason'):
- print("URLError:%s" % e.reason)123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
在这里,我们将这两个全部设置为True。
运行之后,cookies将被保存到cookie.txt文件中。我们可以查看自己查看下cookie.txt这个文件的内容。
3)从文件中获取Cookie并访问
我们已经做到把Cookie保存到文件中了,如果以后想使用,可以利用下面的方法来读取cookie并访问网站,感受一下:
了解到以上内容,我们那就可以开始正式编写模拟登陆伯乐在线的程序了。同时,我们也可以获取相亲MM的联系方式。
4.编写代码
我们利用CookieJar对象实现获取cookie的功能,存储到变量中。然后使用这个cookie变量创建opener,使用这个设置好cookie的opener即可模拟登陆,同笔记四中讲到的IP代理的使用方法类似。
创建cookie_test.py文件,编写代码如下:
5.运行结果如下:
三、总结
获取成功!如果看过之前的笔记内容,我想这些代码应该很好理解吧。
绛旓細鎵浠ユ兂瑕佺埇鍙栬繖绫荤綉绔欙紝蹇呴』鍏堟ā鎷熺櫥褰曘傛瘮杈冪畝鍗曠殑鏂瑰紡鏄埄鐢ㄨ繖涓綉绔欑殑 cookie銆俢ookie 鐩稿綋浜庢槸涓涓瘑鐮佺锛岄噷闈㈠偍瀛樹簡鐢ㄦ埛鍦ㄨ缃戠珯鐨勫熀鏈俊鎭傚湪涓娆$櫥褰涔嬪悗锛岀綉绔欎細璁颁綇浣犵殑淇℃伅锛屾妸瀹冩斁鍒癱ookie閲岋紝鏂逛究涓嬫鑷姩鐧诲綍銆傛墍浠ワ紝瑕佺埇鍙栬繖绫荤綉绔欑殑绛栫暐鏄細鍏堣繘琛屼竴娆℃墜鍔ㄧ櫥褰曪紝鑾峰彇cookie锛岀劧鍚庡啀娆$櫥褰曟椂...
绛旓細F12鏄湪娴忚鍣ㄩ噷鐪嬬殑鍚э紝涓や釜cookie搴斿綋涓涓槸鏈嶅姟鍣ㄥ彂缁欎綘鐨勶紝璁╀綘淇敼浣犳湰鍦扮殑锛屽彟涓涓槸浣犳湰鍦扮殑锛岃鍙戠粰鏈嶅姟鍣ㄧ殑 涓鑸兘鏄python鑷繁缁存姢cookie锛屼笉鐢ㄥ啓浠g爜鍘诲鐞 闄ら潪鎯虫墜鍔ㄤ慨鏀癸紝鎴戝啓杩囩殑python鑷鐞哻ookie鐨勪唬鐮 def __set_cookie(self): """ 璁剧疆Cookie :return: """ ...
绛旓細s = requests.Session()data = {"login":"my_login", "password":"my_password"} url = "r = s.post(url, data=data) # 鏀规垚浣犵殑login浠g爜 涓嬮潰鍏朵粬椤甸潰涔熺敤s r = s.post...
绛旓細鍖呭惈浜Cookie鍚杈撳嚭澶ц嚧濡備笅锛1 2 3 print "Content-Type: text/html"print "Set-Cookie: session=12345"print # 澶氬姞涓涓崲琛岃〃绀篐TTP Header閮ㄥ垎缁撴潫 浠g爜锛歴etcookie.py 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 !/usr/bin/env python import Cookie import datetime impor...
绛旓細python寮傛涓璦iohttp鑾峰彇涓嶅埌姝g‘鐨凷et-cookies鍊 杩欏嚑澶╁涔犱簡python鐨寮傛璇锋眰锛屾兂淇敼涔嬪墠鍐欑殑浠g爜鎻愰珮璇锋眰鏁堢巼锛屼絾閬囧埌涓涓寘鍚玸et-cookie杩斿洖鐨勮姹傛棤娉曡幏鍙栨纭殑cookie鍊 鍘熺▼搴忓叧閿唬鐮侊紙鍗曠嚎绋嬶級锛堥噸鐐圭湅print()杈撳嚭鍐呭锛夛細def enter_study(num, course): # 杩涘叆姣忎釜璇剧兢鐨勬瘡涓绋嬭褰曟瘡涓珷鑺...
绛旓細鏈寮濮嬫槸浠ヤ负鐖櫕琚瘑鍒嚭鏉ユ墍浠ヨ闃绘嫤浜嗭紝浣嗘槸header鍚勭浼閮借瘯杩囦簡锛屼絾鏄緷鏃ц鎷︽埅锛屽悇绉嶈嫤鎭涔嬪悗锛屾棤鎰忎腑鍒锋柊椤甸潰鍗′簡涓涓嬶紝鎵嶄粠chrom涓棿鐪嬪埌浣跨敤娴忚鍣ㄦ甯歌闂篃浼氬嚭鐜颁竴涓521鐨勯敊璇 瀵癸紝涓鑸殑鐖櫕妗嗘灦鎴栬呮槸浣跨敤urllib閮戒細鍦ㄩ亣鍒5寮澶寸殑閿欒鐘舵佸悗鎶涘嚭閿欒锛屼絾鏄笉浼氳繑鍥炴姤鏂囦綋鎴栬呮墽琛屽悗缁殑call...
绛旓細鍙兘鏄湇鍔″櫒鏍规湰娌℃湁cookie鍟娿備綘鎷垮埆浜虹殑浠g爜鏉ョ敤锛岃嚦灏戣鐭ラ亾瀹冪殑浠g爜鏄拡瀵瑰摢浜涚綉绔欑殑銆傝窡韪繘鍘伙紝鎵惧埌WEB璇锋眰鐨勯偅涓娈碉紝鏄剧ず鍑烘潵鐪嬶紝搴旇鍙互鎵惧緱鍒板畠璁剧疆COOKIE鎴栬呮槸妫鏌et-cookie杩欎釜鍊肩殑浠g爜銆傛悳绱et-cookie鍚с
绛旓細! py 3# _*_ coding: utf-8 _*_import osimport sqlite3import requestsfrom win32.win32crypt import CryptUnprotectData def getcookiefromchrome(host='.douban.com'):'''鏈濂借繕鏄粠娴忚鍣ㄨ嚜鍔ㄨ幏鍙栧綋鍓嶇櫥褰曞笎鍙风殑cookies锛岀劧鍚庡啀鎶撳彇鍐呭锛岃繖閲屾槸婕旂ず浠嶨oogle Chrome涓鑾峰彇cookies鐨勪緥瀛愩俬ost 鐧诲綍...
绛旓細浜 cookie 鍦ㄥ鎴风涓 鏈嶅姟鍣ㄦ槸涓嶄細淇濈暀鐨 鍐典笖浣犺浣鑾峰彇鑷繁鐨刢ookie涔熸病鎰忎箟
绛旓細headers = headers)getURL锛氳鐖彇鐨勭櫥闄嗗悗鐨勭綉椤碉紱login.cookies锛氱櫥闄嗘椂鑾峰彇鐨刢ookie淇℃伅锛屽瓨鍌ㄥ湪login涓傦紙5锛夎緭鍑哄唴瀹癸細print response.content浜斻佸叿浣撲唬鐮侊細[python] view plain copy -*- coding:utf-8 -*- author:Simon updatetime:2016骞3鏈17鏃 17:35:35 鍔熻兘锛氱埇铏箣妯℃嫙鐧诲綍锛寀rllib鍜宺...