Python3网络爬虫教程6——cookie & session(cookie的属性,保存及模块的使用)

版权声明:本文章为沐言-BigTree原创,转载复制请标明出处 https://blog.csdn.net/u011318077/article/details/86538097

上接:
Python3网络爬虫教程5——ProxyHandler处理(代理服务器和代理IP)
https://blog.csdn.net/u011318077/article/details/86538042

4. cookie & session

  • 产生的原因:

    • 由于HTTP协议没有记忆性,人们为了弥补这个缺陷,所采用的一个补充协议
    • cookie是发放给用户(即http浏览器)的一段信息,session是保存在服务器上的
    • 对应的另一半信息,用来记录用户的信息
  • cookie和session的区别

    • 存放位置不同
    • cookie不安全
    • session会保存在服务器上一段时间,有一定的期限,会过期
    • 单个cookie数据不超过4KB,很多浏览器限制一个站点最多保存20个
  • session的存放位置

    • 存在服务器端
    • 一般情况,session是放在内存中或者数据库中
  • 没有cookie登陆,模拟登陆人人网

    • 看案例43_11
    • 没有cookie的登陆,返回的网页为未登陆状态,自动跳转到登陆首页
      案例 43_11
# 没有cookie登陆,模拟登陆人人网
# 先登陆自己人人网个人主页,复制主页的网址,
# 如果关闭浏览器后再次打开浏览器,粘贴网址,由于浏览器保存了cookie信息,会进入到个人主页
# 个人主页地址复制到另外一台电脑登陆或者另外一个浏览器,由于没有cookie登陆会跳转到人人网主页

import chardet
from urllib import request

if __name__ == '__main__':

    # 个人人人网登陆后的个人主页
    url = 'http://www.renren.com/574862780'
    rsp = request.urlopen(url)
    html = rsp.read().decode('UTF-8')
    # 将打开的网页保存为html文件,然后浏览器打开
    with open('43_11_rsp.html', 'w') as f:
        f.write(html)

  • 使用cookie登陆人人网
    • 直接将网页中的cookie复制下来,然后手动放入请求头
    • 看案例43_12
      案例 43_12
# 使用cookie登陆,模拟登陆人人网
# 先登陆自己人人网个人主页,复制主页的网址,
# 如果关闭浏览器后再次打开浏览器,粘贴网址,由于浏览器保存了cookie信息,会进入到个人主页
# 个人主页地址复制到另外一台电脑登陆或者另外一个浏览器,由于没有cookie登陆会跳转到人人网主页
# 复制已登录的主页中的cookie信息到请求头中
# 注意cookie有时效性,第二天再次使用可能cookie已经失效

import chardet
from urllib import request

if __name__ == '__main__':

    # 个人人人网登陆后的个人主页
    url = 'http://www.renren.com/969464538/profile'
    headers = {'Cookie': 'anonymid=jqz93aa61j2ebq; depovince=ZGQT; _r01_=1; JSESSIONID=abcCDVfle7EH5eGmyXAHw; ick_login=2c2236f7-9001-4b87-8f7a-4d1ef7936834; t=0c73459378e50f6e3ee47ae345e53ff28; societyguester=0c73459378e50f6e3ee47ae345e53ff28; id=969464538; xnsid=a53a566e; jebecookies=f50fc9af-aab9-4b0e-ba46-2f6662e91791|||||; ver=7.0; loginfrom=null; wp_fold=0'}
    req = request.Request(url, headers=headers)
    rsp = request.urlopen(req)
    html = rsp.read().decode()
    # 将打开的网页保存为html文件,然后浏览器打开
    with open('43_12_rsp.html', 'w') as f:
        f.write(html)
  • cookie模块
    • http模块包含一些关于cookie的模块,通过他们我们可以自动使用cookie
      • CookieJar
        • 管理存储cookie,向传出的http请求头添加cookie
        • cookie存储在内存中,CookieJar实例回收后cookie将消失
      • FileCookieJar(filename, delayload=None, policy=None)
        • 使用文件管理cookie
        • filename是保存cookie的文件
      • MozillaCookieJar(filename, delayload=None, policy=None)
        • 创建与Mozilla浏览器cookie.txt兼容的FileCookie案例
      • LwpCookieJar(filename, delayload=None, policy=None)
        • 创建与libwww-perl标准兼容的Set-Cookie3格式的FileCookieJar实例
      • 他们关系是:CookieJar–>FileCookieJar–>MozillaCookieJar&LwpCookieJar
    • 利用CookieJar访问人人网
      • 看实例43_13
      • 自动使用cookie登陆的流程
        • 打开登陆页面后自动通过用户密码登陆
        • 自动提取反馈回来的cookie
        • 利用提取的cookie登陆隐私页面
      • 案例中的handler是Handler的实例,常规用法参考实例
        案例 43_12
# 使用cookie登陆,模拟登陆人人网
# 先登陆自己人人网个人主页,复制主页的网址,
# 如果关闭浏览器后再次打开浏览器,粘贴网址,由于浏览器保存了cookie信息,会进入到个人主页
# 个人主页地址复制到另外一台电脑登陆或者另外一个浏览器,由于没有cookie登陆会跳转到人人网主页
# 复制已登录的主页中的cookie信息到请求头中
# 注意cookie有时效性,第二天再次使用可能cookie已经失效

import chardet
from urllib import request

if __name__ == '__main__':

    # 个人人人网登陆后的个人主页
    url = 'http://www.renren.com/969464538/profile'
    headers = {'Cookie': 'anonymid=jqz93aa61j2ebq; depovince=ZGQT; _r01_=1; JSESSIONID=abcCDVfle7EH5eGmyXAHw; ick_login=2c2236f7-9001-4b87-8f7a-4d1ef7936834; t=0c73459378e50f6e3ee47ae345e53ff28; societyguester=0c73459378e50f6e3ee47ae345e53ff28; id=969464538; xnsid=a53a566e; jebecookies=f50fc9af-aab9-4b0e-ba46-2f6662e91791|||||; ver=7.0; loginfrom=null; wp_fold=0'}
    req = request.Request(url, headers=headers)
    rsp = request.urlopen(req)
    html = rsp.read().decode()
    # 将打开的网页保存为html文件,然后浏览器打开
    with open('43_12_rsp.html', 'w') as f:
        f.write(html)
            # 生成cookie的管理器
            cookie_handler = request.HTTPCookieProcessor(cookie)
            # 创建http请求管理器
            http_handler = request.HTTPHandler()
            # 生成https管理器
            https_handler = request.HTTPSHandler()
            
- 创建handler之后,使用opener打开,打开后相应的业务由相应的handler处理
    - 将cookie作为一个变量打出来
    - 参考案例43_14 
        - cookie的属性
            - name: 名称
            - value: 值
            - domain: 可以访问此cookie的域名
            - path: 可以访问此cookie的页面路径
            - expires: 过期的时间
            - size:大小
            - http字段
                
- cookie的保存
    - 使用FileCookieJar 
    - 参考案例43_15
    
- cookie的读取
    - 使用cookie.load('cookie.txt')

案例 43_14

# 将cookie打印出来
# 看看cookie里面有什么

from urllib import request, parse
from http import cookiejar

# 创建cookiejar的实例
cookie = cookiejar.CookieJar()
# 生成cookie的管理器
cookie_handler = request.HTTPCookieProcessor(cookie)
# 创建http请求管理器
http_handler = request.HTTPHandler()
# 生成https管理器
https_handler = request.HTTPSHandler()
# 创建请求管理器
opener = request.build_opener(http_handler, https_handler, cookie_handler)

# 初次登录,验证后给我们cookie
def login():
    '''
    负责初次登录
    需输入用户名和密码,用来获取cookie凭证
    '''
    # 登录用户地址,进入人人网登录首页,查看网页源码
    # 网页源码中打开查找,查找“下次自动登录”
    # 然后向上找form,里面就有login-form
    url = 'http://www.renren.com/PLogin.do'

    # 此键值需要从登录form的对应两个input中提取name属性
    data = {
        'email': '[email protected]',
        'password': 'zfb123456'
        }

    # 把数据进行编码
    data = parse.urlencode(data)

    # 创建一个请求对象
    req = request.Request(url, data=data.encode())

    # 使用opener发起请求,会自动提取我的cookie
    rsp = opener.open(req)


if __name__ == '__main__':
    # 如果已经执行了login,则opener则自动已经包含了相应的cookie值
    login()
    # 我们将cookie打印出来,可以采用访问字典的方式访问
    print(cookie)
    for item in cookie:
        print(type(cookie))
        print(item)
        # 获取item的属性
        print(dir(item))
    # 把最后一个item里面所有的变量打印出来
    for i in dir(item):
        print(i)

案例 43_15

# 将获取到的cookie保存下来
# 使用filecookiejar实现


from urllib import request, parse
from http import cookiejar

# 创建filecookiejar的实例
filename = '43_15_cookie.txt'
cookie = cookiejar.MozillaCookieJar(filename)
# 生成cookie的管理器
cookie_handler = request.HTTPCookieProcessor(cookie)
# 创建http请求管理器
http_handler = request.HTTPHandler()
# 生成https管理器
https_handler = request.HTTPSHandler()
# 创建请求管理器
opener = request.build_opener(http_handler, https_handler, cookie_handler)

# 初次登录,验证后给我们cookie
def login():
    '''
    负责初次登录
    需输入用户名和密码,用来获取cookie凭证
    '''
    # 登录用户地址,进入人人网登录首页,查看网页源码
    # 网页源码中打开查找,查找“下次自动登录”
    # 然后向上找form,里面就有login-form
    url = 'http://www.renren.com/PLogin.do'

    # 此键值需要从登录form的对应两个input中提取name属性
    data = {
        'email': '[email protected]',
        'password': 'zfb123456'
        }

    # 把数据进行编码
    data = parse.urlencode(data)

    # 创建一个请求对象
    req = request.Request(url, data=data.encode())

    # 使用opener发起请求,会自动提取我的cookie
    rsp = opener.open(req)

    # 保存cookie到文件
    # ignore_discard表示即使cookie没什么用了也会保存下来
    # ignore_expires表示该文件中的cookie即使已经过期也保存下来
    cookie.save(ignore_discard=True, ignore_expires=True)


if __name__ == '__main__':
    login()

下接:
Python3网络爬虫教程7——SSL数字证书

猜你喜欢

转载自blog.csdn.net/u011318077/article/details/86538097