什么是Cookie
在网站中,http的请求通常是无状态的(第一个和服务器连接并且登录之后,此时服务器知道是哪个用户,但是当第二次请求服务器时,服务器依然不知道当前请求的是哪个用户),cookie就是为了解决这个问题,第一次登录服务器后,服务器会返回与刚刚用户相关的数据(也就是cookie)给浏览器,浏览器将cookie保存在本地,当这个用户第二次请求服务器时,就会把上次存储的cookie自动携带给服务器,服务器通过这个cookie就知道当前是哪个用户。cookiede存储数据有限,不同的浏览器存储大小不同。一般不超过4kb。
在一些爬虫中,我们在进入一个页面之前需要先登录,比如人人网,我们想要在人人网中浏览大鹏的主页,就要先注册登录,然后才能浏览,那么在爬虫时,如何保持登录状态呢?
第一种:
就需要在请求头中加入cookie。
我们在页面中右击-选择查看元素-然后选择network-刷新选择第一个profile-然后找到cookie
把cookie放到外我们代码的请求头中
# 使用cookie如何保持登录 from urllib import request dapeng_url='http://www.renren.com/880151247/profile' headers={ 'User-Agent':"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36", 'Cookie':"anonymid=k71toeni-kgxl6w; ick=15da19e2-eda3-436b-bbff-75e5ed22675a; t=2e83d3955db7ebed31b7aa451ce1fc3e6; societyguester=2e83d3955db7ebed31b7aa451ce1fc3e6; id=973827756; xnsid=83d505c7; XNESSESSIONID=96f6169a931b; JSESSIONID=abcnUOS-mxGHLfAakl8bx; depovince=GW; jebecookies=06d125d2-feee-42d3-b3dd-c2d44c83ca52|||||; ver=7.0; loginfrom=null; taihe_bi_sdk_uid=e1ab093fade1d5f67bb87b09690c33ec; taihe_bi_sdk_session=b22cdcce97f748cdd571ae2dd15f35c0; jebe_key=3f1e8e5f-c442-44f0-913c-b5724bf5f271%7C92df3a4ff360db67ebedb3fcbe322fc1%7C1582631331810%7C1%7C1582631331959; jebe_key=3f1e8e5f-c442-44f0-913c-b5724bf5f271%7C92df3a4ff360db67ebedb3fcbe322fc1%7C1582631331810%7C1%7C1582631331961; wp_fold=0" } req=request.Request(url=dapeng_url,headers=headers) resp=request.urlopen(req) print(resp.read().decode('utf-8'))
我们就可以在保持登录的状态下进入大鹏的主页
第二种:
http.cookiejar模块:该模块主要得类有:cookiejar、filecookiejar、mozaillacookiejar、lwpcookiejar。我们使用第一个就行,保存在类存中。
这一种可以实现自动化,不需要每次都在请求头中复制cookie
from urllib import request from urllib import parse from http.cookiejar import CookieJar # 1、登录 # 1.1、创建一个cookiejar对象,里面包含了登录用到得信息 cookiejar=CookieJar() # 1.2 使用cookiejar创建一个HTTPCookieProcess对象,找个代理,并且里面已经包含了cookiejar handler=request.HTTPCookieProcessor(cookiejar) # 1.3、使用上一步骤创建一个handler创建一个opener opener=request.build_opener(handler) # 1.4、使用opener发送登录请求(人人网得邮箱和密码) headers={ 'User-Agent': "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36" } data={ 'email':'2605072149@qq.com', 'password':'123456' } login_url="http://www.renren.com/PLogin.do" req=request.Request(login_url,data=parse.urlencode(data).encode('utf-8'),headers=headers) opener.open(req) # 2、访问个人主页 dapeng_url="http://www.renren.com/880151247/profile" # 获取个人主页信息得时候,使用之前得那个opener,因为已经包含了登录用得信息 resp=opener.open(dapeng_url) with open("renren.html","w",encoding='utf-8') as fp: fp.write(resp.read().decode('utf-8'))
本文链接:http://task.lmcjl.com/news/6548.html