爬虫之FileCookieJar

简介

虽然CookieJar模块能够做到给请求设置cookie,但是它的cookie是保存在内存里的,每次用都需要重新设置,

这就衍生了一个它的子类---FileCookieJar,它可以将cookie保存在文件中,然后直接使用就可了

示例

cookie的保存

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
from urllib import request,parse
from http import cookiejar
 
# 创建filecookiejar实例对象
# 它需要一个参数,既cookie保存的位置
filename = 'cookie.txt'
cookie = cookiejar.FileCookieJar(filename)
 
# 根据创建的cookie生成cookie的管理器
cookie_handle = request.HTTPCookieProcessor(cookie)
 
# 创建http请求管理器
http_handle = request.HTTPHandler()
 
# 创建https管理器
https_handle = request.HTTPSHandler()
 
# 创建求求管理器,将上面3个管理器作为参数属性
# 有了opener,就可以替代urlopen来获取请求了
opener =  request.build_opener(cookie_handle,http_handle,https_handle)
 
def login():
    '''
    负责初次登录
    需要传递用户名和密码,来获取登录的cookie凭证
    '''
    # 登录url,需要从登录form的action属性中获取
    url = 'http://www.renren.com/PLogin.do'
 
    # 登录所需要的数据,数据为字典形式,
    # 此键值需要从form扁担中对应的input的name属性中获取
    data = {
        'email':'136808069@qq.com',
        'password':'123456'
    }
 
    # 将数据解析成urlencode格式
    data = parse.urlencode(data)
 
    req = request.Request(url,data=data)
 
    # 正常是用request.urlopen(),这里用opener.open()发起请求
    response = opener.open(req)
 
    # 保存cookie文件
    cookie.save()
 
 
 
if __name__ == '__main__':
    '''
    执行login函数
    '''
    login()

  

cookie的调用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
from urllib import request,parse
from http import cookiejar
 
# 创建cookiejar实例对象
cookie = cookiejar.FileCookieJar()
 
# 读取已经保存的cookie文件
# 读取之后,就无需登录,直接访问主页即可
cookie.load('cookie.txt')
 
# 根据创建的cookie生成cookie的管理器
cookie_handle = request.HTTPCookieProcessor(cookie)
 
# 创建http请求管理器
http_handle = request.HTTPHandler()
 
# 创建https管理器
https_handle = request.HTTPSHandler()
 
# 创建求求管理器,将上面3个管理器作为参数属性
# 有了opener,就可以替代urlopen来获取请求了
opener =  request.build_opener(cookie_handle,http_handle,https_handle)
 
 
 
def getHomePage():
    '''
    获取登录后的页面
    '''
 
    # 此url是登录后的链接地址
    url = 'http://www.renren.com/965187997/profile'
 
    # 如果已经执行了上面的login函数,
    # 那么此时的opener已经是包含了cookie信息的一个opener对象
    res = opener.open(url)
 
    html = res.read().decode()
 
    with open('renren.html','w') as f:
        f.write(html)
 
 
if __name__ == '__main__':
    getHomePage()

  

posted @   人生不如戏  阅读(715)  评论(0编辑  收藏  举报
编辑推荐:
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
阅读排行:
· Windows桌面应用自动更新解决方案SharpUpdater5发布
· 我的家庭实验室服务器集群硬件清单
· C# 13 中的新增功能实操
· Supergateway:MCP服务器的远程调试与集成工具
· Vue3封装支持Base64导出的电子签名组件
点击右上角即可分享
微信分享提示