最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • Python之Cookie的相关介绍

    正文概述    2020-05-10   190

    Cookie 是指某些网站服务器为了辨别用户身份和进行Session跟踪,而储存在用户浏览器上的文本文件,Cookie可以保持登录信息到用户下次与服务器的会话。

    Python之Cookie的相关介绍

    HTTP是无状态的面向连接的协议, 为了保持连接状态, 引入了Cookie机制。Cookie是http消息头中的一种属性,包括:

    Cookie名字(Name)

    Cookie的值(Value)

    Cookie的过期时间(Expires/Max-Age)

    Cookie作用路径(Path)

    Cookie所在域名(Domain),

    使用Cookie进行安全连接(Secure)。

    前两个参数是Cookie应用的必要条件,另外,还包括Cookie大小(Size,不同浏览器对Cookie个数及大小限制是有差异的)。

    Cookie由变量名和值组成,根据 Netscape公司的规定,Cookie格式如下:

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

    Cookie应用

    Cookies在爬虫方面最典型的应用是判定注册用户是否已经登录网站,用户可能会得到提示,是否在下一次进入此网站时保留用户信息以便简化登录手续。

    import urllib.request
    
    # 1. 构建一个已经登录过的用户的headers信息
    headers = {
        "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) 
        Chrome/73.0.3683.103 Safari/537.36",
        "Cookie": "anonymid=jurpmxe9-orl7u3;"
                  "depovince=BJ;"
                  " _r01_=1; "
                  "JSESSIONID=abcwYLyIY7VNIhCDVWcPw;"
                  " jebe_key=f6fb270b-d06d-42e6-8b53-e67c3156aa7e%7Cc13c37f53bca9e1e7132d4b58ce00fa3%7C148406060
                  7478%7C1%7C1484060607173;"
                  " jebecookies=f1fd29c4-bd08-4d66-8834-72e42b70d2cb|||||; "
                  "ick_login=0f790ea2-c8bf-4d64-a394-36745febeb26;"
                  " _de=622DE758381206EB340E4CEC836F3769696BF75400CE19CC;"
                  " p=7e50f3fe10ca320e36dae001c72d392d3;"
                  " ap=327550029;"
                  " first_login_flag=1;"
                  " ln_uact=562352353@qq.com;"
                  " ln_hurl=http://hdn.xnimg.cn/photos/hdn121/20120930/2035/h_main_hcDy_40fc000002d91375.jpg;"
                  " t=d7c6ae064b81ae15f5b91f5897dc61553;"
                  " societyguester=d7c6ae064b81ae15f5b91f5897dc61553;"
                  " id=485439163;"
                  " xnsid=bc995dc8;"
                  " ver=7.0;"
                  " loginfrom=null"
    }
    
    # 2. 通过headers里的报头信息(主要是Cookie信息),构建Request对象
    request = urllib.request.Request("http://www.renren.com", headers=headers)
     
    # 3. 直接访问renren主页,服务器会根据headers报头信息(主要是Cookie信息),判断这是一个已经登录的用户,并返回相应的页面
    response = urllib.request.urlopen(request)
    
    # 4. 打印响应内容
    print(response.read().decode("utf-8"))

    但是这样做太过复杂,我们先需要在浏览器登录账户,并且设置保存密码,并且通过抓包才能获取这个Cookie,那有么有更简单方便的方法呢?

    相关推荐:《Python视频教程》

    cookielib库 和 HTTPCookieProcessor处理器

    在Python处理Cookie,一般是通过 http 模块的 cookiejar 模块和 urllib 模块的 HTTPCookieProcessor 处理器类一起使用。

    cookiejar模块:主要作用是提供用于存储cookie的对象。

    HTTPCookieProcessor处理器:主要作用是处理这些cookie对象,并构建handler对象。

    import urllib.request
    import urllib.parse
    from http import cookiejar
    
    # 1. 构建一个CookieJar对象实例来保存cookie
    cookie = cookiejar.CookieJar()
    
    # 2. 使用HTTPCookieProcessor()来创建cookie处理器对象,参数为CookieJar()对象
    cookie_handler = urllib.request.HTTPCookieProcessor(cookie)
    
    # 3. 通过 build_opener() 来构建opener
    opener = urllib.request.build_opener(cookie_handler)
    
    # 4. addheaders 接受一个列表,里面每个元素都是一个headers信息的元祖, opener将附带headers信息
    opener.addheaders = [("User-Agent",
                          "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like 
                          Gecko) Chrome/73.0.3683.103 Safari/537.36")]
    
    # 5. 需要登录的账户和密码
    data = {"email": "562352353@qq.com", "password": "chen562352353"}
    
    # 6. 通过urlencode()转码
    postdata = urllib.parse.urlencode(data).encode("utf-8")
    
    # 7. 构建Request请求对象,包含需要发送的用户名和密码
    request = urllib.request.Request("http://www.renren.com/PLogin.do", data=postdata)
    
    # 8. 通过opener发送这个请求,并获取登录后的Cookie值,
    opener.open(request) 
    # 9. opener包含用户登录后的Cookie值,可以直接访问那些登录后才可以访问的页面
    response = opener.open("http://www.renren.com/485439163")
    
    # 10. 打印响应内容
    print(response.read().decode("utf-8"))

    模拟登录要注意几点:

    登录一般都会先有一个HTTP GET,用于拉取一些信息及获得Cookie,然后再HTTP POST登录。

    HTTP POST登录的链接有可能是动态的,从GET返回的信息中获取。

    password 有些是明文发送,有些是加密后发送。有些网站甚至采用动态加密的,同时包括了很多其他数据的加密信息,只能通过查看JS源码获得加密算法,再去破解加密,非常困难。

    大多数网站的登录整体流程是类似的,可能有些细节不一样,所以不能保证其他网站登录成功。


    起源地下载网 » Python之Cookie的相关介绍

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元