python爬虫之cookie

什么是cookie:

在网站中,http请求是无状态的。也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户。cookie的出现就是为了解决这个问题,第一次登录后服务器返回一些数据(cookie)给浏览器,然后浏览器保存在本地,当该用户发送第二次请求的时候,就会自动的把上次请求存储的cookie 数据自动的携带给服务器,服务器通过浏览器携带的数据就能判断当前用户是哪个了。cookie存储的数据量有限,不同的浏览器有不同的存储大小,但一般不超过4KB。因此使用cookie只能存储一些小量的数据。

cookie的格式:

Set-Cookie: NAME=VALUE;Expires/Max-age=DATE;Path=PATH;Domain=DOMAIN_NAME;SECURE

参数意义:

  • NAME:cookie的名字。
  • VALUE:cookie的值。
  • Expires:cookie的过期时间。
  • Path:cookie作用的路径。该 Cookie 是在当前的哪个路径下生成的,如 path=/wp-admin/。
  • Domain:cookie作用的域名。
  • SECURE:是否只在https协议下起作用。如果设置了这个属性,那么只会在 SSH 连接时才会回传该 Cookie

cookie机制

当用户第一次访问并登陆一个网站的时候,cookie的设置以及发送会经历以下4个步骤:

客户端发送一个请求到服务器 --》 服务器发送一个HttpResponse响应到客户端,其中包含Set-Cookie的头部 --》 客户端保存cookie,之后向服务器发送请求时,HttpRequest请求中会包含一个Cookie的头部 --》服务器返回响应数据

1.如果不使用cookie直接来访问请求:

在 网页直接访问女神主页直接会弹到登录页面。

女神主页URL:http://www.renren.com/256450404/profile

代码示例:

#encoding:utf-8#代码女神赵洁琼主页:http://www.renren.com/256450404/profile
#人人网登录URL:http://www.renren.com/Plogin.dofrom urllib import request#1.不使用cookie访问女神主页nvshen_url="http://www.renren.com/256450404/profile"headers={'User-Agent':"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 UBrowser/6.2.4098.3 Safari/537.36"
}req=request.Request(url=nvshen_url,headers=headers)
resp=request.urlopen(req)
#print(resp.read())#将读取的内容写入html文件中with open('renren.html','w') as fp:#write函数必须写入一个str的数据类型#resp.read()读出来的是一个bytes数据类型#bytes ->decode -> str#str ->encode ->bytesfp.write(resp.read().decode('utf-8'))

获得的结果html文件打开如下图,虽然有点乱码, 但是还是能看出来 是登录页面,说明要想进入女神主页,还是需要登录的cookie进行请求访问才能实现。

复制浏览器中的cookie

#encoding:utf-8#代码女神赵洁琼主页:http://www.renren.com/256450404/profile
#人人网登录URL:http://www.renren.com/Plogin.dofrom urllib import request#2.使用cookie访问女神主页nvshen_url="http://www.renren.com/256450404/profile"headers={'User-Agent':"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 UBrowser/6.2.4098.3 Safari/537.36",'Cookie':'anonymid=k8cdsuqh-srt2i0; depovince=GW; _r01_=1; taihe_bi_sdk_uid=bfe301037dffbe108487b72db5bf7e6b; jebe_key=6e985591-b125-4e8c-a086-6ffa0d70d0c2%7C50f2c4113393fea64a81ef35b552f056%7C1585446344625%7C1%7C1585446346127; jebe_key=6e985591-b125-4e8c-a086-6ffa0d70d0c2%7C50f2c4113393fea64a81ef35b552f056%7C1585446344625%7C1%7C1585446346129; JSESSIONID=abcB_WFVogSDj9AkbRLex; ick_login=b047f395-23df-4b1c-bc91-912f67b0f2fa; taihe_bi_sdk_session=d4e78eb86e06c00aa0c3e1487f6275a8; t=ce3517a93cf84e7d1e51f9b959106a9c6; societyguester=ce3517a93cf84e7d1e51f9b959106a9c6; id=974111896; xnsid=da5394c8; jebecookies=ab44e1ca-1fb8-4a83-8c39-9bd813f4d802|||||; ver=7.0; loginfrom=null; wp_fold=0'
}req=request.Request(url=nvshen_url,headers=headers)
resp=request.urlopen(req)
#print(resp.read())with open('renren2.html','w',encoding='utf-8') as fp:#write函数必须写入一个str的数据类型#resp.read()读出来的是一个bytes数据类型#bytes ->decode -> str#str ->encode ->bytesfp.write(resp.read().decode('UTF-8'))

但是每次在访问需要cookie的页面都要从浏览器中复制cookie比较麻烦。在Python处理Cookie,一般是通过http.cookiejar模块和urllib模块的HTTPRCookieProcessor处理器类一起使用。http.cookiejar模块主要作用是提供用于存储cookie的对象。而HTTPCookicProcessor处理器主要作用是处理这些cookie对象,并构建handler对象。

http.cookiejar模块:

该模块主要的类有CookieJar、FileCookieJar、MozillaCookieJar、LWPCookieJar。这四个类的作用分别如下:
1.CookieJar:管理HTTP cookie值、存储HTTP请求生成的cookie、向传出的HTTP请求添加cookie的对象。整个cookle都存储在内存中,对CookieJar实例进行垃圾回牧后cookie也将丢失。
2.FileCookieJar (filename,delayload=None,policy=None):从CookieJar派生而来,用来创建FileCookieJar实例,检索cookie信息并将cookie存储到文件中。filename是存储cookie的文件名。delayload为True时支持延迟访问访问文件,即只有在需要时才读取文件或在文件中存储数据。
3.MozillaCookieJar (filename,delayload=None,policy-None):从FileCookieJar派生而来,创建与Mo zilla刘览器cookies.txt兼容的FileCookieJar实例。
4.LWPCookieJar (flename,delayload=None,policy=None): 从FileCookieJar派生而来,创建与libwww-perl标准的Set-Cookle3文件格式兼容的FileCookieJar实例。
利用http.cookiejar和request.HTTPCookieProcessor登录人人网。相关示例代码如下:

from urllib import request
from http.cookiejar import CookieJar
from urllib import parse
#1.登录去获取cookie
#1.创建一个CookieJar的对象来保存cookie
cookiejar=CookieJar()
#2.使用cookiejar创建一个HttpCOOKIEProcesser对象
handler=request.HTTPCookieProcessor(cookiejar)
#3.使用上一步生成的handler生成一个opener
opener=request.build_opener(handler)
#4.使用opener发送登录的请求headers={'User-Agent':"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 UBrowser/6.2.4098.3 Safari/537.36",
}data={'email':"970138074@qq.com",'password':"pythonspider"
}
#登录页面
login_url='http://www.renren.com/SysHome.do'req=request.Request(url=login_url,data=parse.urlencode(data).encode('utf-8'),headers=headers)
opener.open(req)
#2.进入女神主页
nvshen_url="http://www.renren.com/256450404/profile"#获取个人主页的时候,不需要新建opener
#应该使用之前的那个opener,因为之前的已经包含需要的cookie
req2=request.Request(nvshen_url,headers=headers)
resp=opener.open(req2)
from urllib import request
from http.cookiejar import CookieJar
from urllib import parseheaders = {'User-Agent': "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 UBrowser/6.2.4098.3 Safari/537.36",
}
def get_opener():# 1.登录去获取cookie# 1.创建一个CookieJar的对象来保存cookiecookiejar = CookieJar()# 2.使用cookiejar创建一个HttpCOOKIEProcesser对象handler = request.HTTPCookieProcessor(cookiejar)# 3.使用上一步生成的handler生成一个openeropener = request.build_opener(handler)# 4.使用opener发送登录的请求return openerdef log_renren(opener):data = {'email': "970138074@qq.com",'password': "pythonspider"}# 登录页面login_url = 'http://www.renren.com/SysHome.do'req = request.Request(url=login_url, data=parse.urlencode(data).encode('utf-8'), headers=headers)opener.open(req)
def visit_profile(opener):# 2.进入女神主页nvshen_url = "http://www.renren.com/256450404/profile"# 获取个人主页的时候,不需要新建opener# 应该使用之前的那个opener,因为之前的已经包含需要的cookiereq2 = request.Request(nvshen_url, headers=headers)resp = opener.open(req2)
if __name__ == '__main__':opener=get_opener()log_renren(opener)visit_profile(opener)

保存cookie到本地:

保存cookie到本地,可以使用cookiejarsave方法,并且需要指定一个文件名:

from urllib import request,parse
from http.cookiejar import MozillaCookieJar#保存cookie到本地文件
cookiejar=MozillaCookieJar('cookie.txt')
handler=request.HTTPCookieProcessor(cookiejar)
opener=request.build_opener(handler)
resp=opener.open('http://httpbin.org/cookies/set?freeform=course%3Daaa')
#resp=opener.open('http://www.baidu.com/')
#cookiejar.save()cookiejar.save(ignore_discard=True)
#即将过期的cookie信息也会保存起来'''
# Netscape HTTP Cookie File
# http://curl.haxx.se/rfc/cookie_spec.html
# This is a generated file!  Do not edit..baidu.com TRUE    /   FALSE   1644745918  BAIDUID 91DC90905091E99B1D1B062FE3CF3549:FG=1
.baidu.com  TRUE    /   FALSE   3760693565  BIDUPSID    91DC90905091E99B75D901DB55EEB2B9
.baidu.com  TRUE    /   FALSE       H_PS_PSSID  33423_33401_33344_33585_26350
.baidu.com  TRUE    /   FALSE   3760693565  PSTM    1613209918
www.baidu.com   FALSE   /   FALSE       BDSVRTM 0
www.baidu.com   FALSE   /   FALSE       BD_HOME 1

从本地加载cookie:

从本地加载cookie,需要使用cookiejarload方法,并且也需要指定方法:

from urllib import request,parse
from http.cookiejar import MozillaCookieJar#加载本地cookie
#保存cookie到本地文件
cookiejar1=MozillaCookieJar('cookie.txt')
cookiejar1.load(ignore_discard=True)
handler=request.HTTPCookieProcessor(cookiejar)
opener=request.build_opener(handler)resp=opener.open('http://httpbin.org/cookies')for cookie in cookiejar1:  #将cookie打印到控制台print(cookie)

python爬虫之cookie相关推荐

  1. 利用python爬虫(part15)--cookie模拟登陆

    学习笔记 文章目录 cookie模拟登陆 获取cookie 爬取我的简介 cookie模拟登陆 有的时候,我们想要抓取一个网站,但是需要先登录才能访问它,如果不输入用户名和密码,我们就会一直停留在登录 ...

  2. python爬虫之cookie方式自动登录巴比特网

    最近打算抓取公司内部PPT模板库中的PPT,发现被各种安全屏蔽.因为好久没写程序了,因此写几个例子回顾下基本的爬虫知识 目标网址巴比特的登录页面 http://8btc.com/member.php? ...

  3. python爬虫判断cookie过期_当爬虫遇到cookie失效,怎样处理?

    之前使用爬虫时,最让我头疼的就是cookie失效的问题了.由于有的cookie存在时效问题.一段时间后,cookies会失效.失效后,爬虫碰到的页面就基本上是重新登录的页面了.这时候就需要cookie ...

  4. python爬虫-使用cookie登录

    前言: 什么是cookie? Cookie,指某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密). 比如说有些网站需要登录后才能访问某个页面,在登录之前,你想 ...

  5. python爬虫之---------------cookie和session

    cookie 1. cookie的由来: 大家都知道HTTP协议是无状态的. 无状态:是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响, ...

  6. Python爬虫进行Cookie登录

    不太喜欢说废话,直接开始. 一.首先找到发送登录请求(post或get)的url: 可以用抓包工具来进行捕捉,我用的工具是fiddler.fidder的安装及使用方法大家自行百度.这里假设大家已经安装 ...

  7. Python爬虫之Cookie和Session(转载)

    http://www.cnblogs.com/zhaof/p/7211253.html 转载于:https://www.cnblogs.com/shaosks/p/10298930.html

  8. python获取登录后的cookie_python爬虫使用cookie登录详解

    前言: 什么是cookie? Cookie,指某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密). 比如说有些网站需要登录后才能访问某个页面,在登录之前,你想 ...

  9. python爬虫 - Urllib库及cookie的使用

    lz提示一点,python3中urllib包括了py2中的urllib+urllib2.[python2和python3的区别.转换及共存 - urllib] 怎样扒网页? 其实就是根据URL来获取它 ...

  10. Python爬虫入门(6):Cookie的使用

    Python爬虫入门(1):综述 Python爬虫入门(2):爬虫基础了解 Python爬虫入门(3):Urllib库的基本使用 Python爬虫入门(4):Urllib库的高级用法 Python爬虫 ...

最新文章

  1. VS2010 MFC中 单独添加ODBC数据库记录集类(CRecordset)方法
  2. uniapp cross-env不是内部或外部_企业内部防泄密三部曲 严防祸起萧墙之内
  3. python编程爱心-520用Python画一颗特别的爱心送给她
  4. 【直播回放】如何准备计算机视觉的面试?
  5. 获取工作流活动的返回值
  6. [转] 哈佛大学研究:一个人成为废物的九大根源
  7. 某知名公司ERP数据库结构[5]
  8. Class.forName的作用以及为什么要用它【转】
  9. 可启动 ISO 合并、Windows 安装光盘合集
  10. Spring Security的工作原理
  11. 数据结构导论 — (自考)
  12. 白色背景,白色文字怎么显示清晰?
  13. 基于ubuntu系统的HEVC视频编码与解码
  14. 2016-09-01[关于Paint笔触的了解]
  15. 最新·前端的工资分布情况 - 你拖后腿了吗?
  16. html怎么设置页脚注释,Word写论文时怎么插入页脚注释?
  17. [实践篇]13.8 如何解析gcore?
  18. 蓝桥杯:排列字母(C++)
  19. [渝粤教育] 西安交通大学 工程热力学 参考 资料
  20. 使用uniapp开发APP时的调试/安卓打包等

热门文章

  1. 数据挖掘算法和实践(三):朴素贝叶斯(mushrooms蘑菇数据集)
  2. 波士顿动力SpotMini改造有胳膊半人马,这家意大利创企打造极致机械手臂
  3. 埃默里大学有计算机专业吗,埃默里大学计算机科学研究生最新专业排名
  4. 贪心算法3——加油站问题
  5. Swift游戏实战-跑酷熊猫 09 移除场景之外的平台
  6. oled屏幕(IIC接口+1306驱动)+raspberrypi pico 显示基于RT-Thread
  7. 最实用的上网网址一览表
  8. 怎么把win10右下角的隐藏图标调出来(把倒三角调出来)
  9. JAVA 将唐诗按照古文样式输出
  10. 【JAVA SE基础篇】24.包的机制和import详解