zoukankan      html  css  js  c++  java
  • Python的Cookie如何正确操作运用呢?案例详解

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

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

    Cookie名字(Name)

    Cookie的值(Value)

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

    Cookie作用路径(Path)

    Cookie所在域名(Domain),

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

    前两个参数是Cookie应用的必要条件,另外,还包括Cookie大小(Size,不同浏览器对Cookie个数及大小限制是有差异的)。另外注意:光理论是不够的。这里顺便免费送大家一套2020最新python入门到高级项目实战视频教程,可以去小编的Python交流.裙 :七衣衣九七七巴而五(数字的谐音)转换下可以找到了,还可以跟老司机交流讨教!

    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源码获得加密算法,再去破解加密,非常困难。

    大多数网站的登录整体流程是类似的,可能有些细节不一样,所以不能保证其他网站登录成功。
    最后注意:光理论是不够的。这里顺便免费送大家一套2020最新python入门到高级项目实战视频教程,可以去小编的Python交流.裙 :七衣衣九七七巴而五(数字的谐音)转换下可以找到了,还可以跟老司机交流讨教!

    本文的文字及图片来源于网络加上自己的想法,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

  • 相关阅读:
    Attention中的qkv与机器翻译中的对应关系
    numpy.copy和torch.tensor的cpu/gpu
    F1值的优化macro
    py中函数是传值还是传引用
    scipy.optimize.minimize||非线性规划
    离散label的优化trick
    python Queue/collections.deque
    tf.pad学习
    tensor2tensor-transformer源码学习
    最早的attention论文学习-通过联合学习进行对齐和翻译的神经机器翻译
  • 原文地址:https://www.cnblogs.com/chengxuyuanaa/p/13023873.html
Copyright © 2011-2022 走看看