爬虫之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() |
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· Windows桌面应用自动更新解决方案SharpUpdater5发布
· 我的家庭实验室服务器集群硬件清单
· C# 13 中的新增功能实操
· Supergateway:MCP服务器的远程调试与集成工具
· Vue3封装支持Base64导出的电子签名组件