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

Cookie,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。 比如说有些网站需要登录后才能访问某个页面,在登录之前,你想抓取某个页面内容,登陆前与登陆后是不同的,或者不允许的。另外如果你刚学不久。对这方面还不熟,建议先去小编的Python交流.裙 :一久武其而而流一思(数字的谐音)转换下可以找到了,里面有最新Python教程项目可拿,多跟里面的人交流,比自己摸索效率更高哦!

在python中它为我们提供了cookiejar模块,它位于http包中,用于对Cookie的支持。通过它我们能捕获cookie并在后续连接请求时重新发送,比如可以实现模拟登录功能。该模块主要的对象有CookieJar、FileCookieJar、MozillaCookieJar、LWPCookieJar。

## cookie的获取

# -*- coding: UTF-8 -*-
from urllib import request
from http import cookiejar

if __name__ == '__main__':
   #声明一个CookieJar对象实例来保存cookie
   cookie = cookiejar.CookieJar()
   #利用urllib.request库的HTTPCookieProcessor对象来创建cookie处理器,也就CookieHandler
   handler=request.HTTPCookieProcessor(cookie)
   #通过CookieHandler创建opener
   opener = request.build_opener(handler)
   #此处的open方法打开网页
   response = opener.open('http://www.baidu.com')
   #打印cookie信息
   for item in cookie:
       print('Name = %s' % item.name)
       print('Value = %s' % item.value)

cookie的文件保存
# -*- coding: UTF-8 -*-
from urllib import request
from http import cookiejar

if __name__ == '__main__':

   #设置保存cookie的文件,同级目录下的cookie.txt
   filename = 'cookie.txt'
   #声明一个MozillaCookieJar对象实例来保存cookie,之后写入文件
   cookie = cookiejar.MozillaCookieJar(filename)
   #利用urllib.request库的HTTPCookieProcessor对象来创建cookie处理器,也就CookieHandler
   handler=request.HTTPCookieProcessor(cookie)
   #通过CookieHandler创建opener
   opener = request.build_opener(handler)
   #此处的open方法打开网页
   response = opener.open('http://www.baidu.com')
   #保存cookie到文件
   cookie.save(ignore_discard=True, ignore_expires=True)

加载保存的cookie,并进行网页访问
# -*- coding: UTF-8 -*-
from urllib import request
from http import cookiejar

if __name__ == '__main__':
   #设置保存cookie的文件的文件名,相对路径,也就是同级目录下
   filename = 'cookie.txt'
   #创建MozillaCookieJar实例对象
   cookie = cookiejar.MozillaCookieJar()
   #从文件中读取cookie内容到变量
   cookie.load(filename, ignore_discard=True, ignore_expires=True)
   #利用urllib.request库的HTTPCookieProcessor对象来创建cookie处理器,也就CookieHandler
   handler=request.HTTPCookieProcessor(cookie)
   #通过CookieHandler创建opener
   opener = request.build_opener(handler)
   #此用opener的open方法打开网页
   response = opener.open('http://www.baidu.com')
   #打印信息
   print(response.read().decode('utf-8'))
这里对cookie的使用类似于,之前我们用到的对代理的使用。

加载cookie,实现网站的登录
# -*- coding: UTF-8 -*-
from urllib import request
from urllib import error
from urllib import parse
from http import cookiejar

if __name__ == '__main__':
   #登陆地址
   login_url = 'http://www.jobbole.com/wp-admin/admin-ajax.php'    
   #User-Agent信息                  
   user_agent = r'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36'
   #Headers信息
   head = {'User-Agnet': user_agent, 'Connection': 'keep-alive'}
   #登陆Form_Data信息
   Login_Data = {}
   Login_Data['action'] = 'user_login'
   Login_Data['redirect_url'] = 'http://www.jobbole.com/'
   Login_Data['remember_me'] = '0'         #是否一个月内自动登陆
   Login_Data['user_login'] = '********'       #改成你自己的用户名
   Login_Data['user_pass'] = '********'        #改成你自己的密码
   #使用urlencode方法转换标准格式
   logingpostdata = parse.urlencode(Login_Data).encode('utf-8')
   #声明一个CookieJar对象实例来保存cookie
   cookie = cookiejar.CookieJar()
   #利用urllib.request库的HTTPCookieProcessor对象来创建cookie处理器,也就CookieHandler
   cookie_support = request.HTTPCookieProcessor(cookie)
   #通过CookieHandler创建opener
   opener = request.build_opener(cookie_support)
   #创建Request对象
   req1 = request.Request(url=login_url, data=logingpostdata, headers=head)

   #面向对象地址
   date_url = 'http://date.jobbole.com/wp-admin/admin-ajax.php'
   #面向对象
   Date_Data = {}
   Date_Data['action'] = 'get_date_contact'
   Date_Data['postId'] = '4128'
   #使用urlencode方法转换标准格式
   datepostdata = parse.urlencode(Date_Data).encode('utf-8')
   req2 = request.Request(url=date_url, data=datepostdata, headers=head)
   try:
       #使用自己创建的opener的open方法
       response1 = opener.open(req1)
       response2 = opener.open(req2)
       html = response2.read().decode('utf-8')
       index = html.find('jb_contact_email')
       #打印查询结果
       print('联系邮箱:%s' % html[index+19:-2])

   except error.URLError as e:
       if hasattr(e, 'code'):
           print("HTTPError:%d" % e.code)
       elif hasattr(e, 'reason'):
           print("URLError:%s" % e.reason)
​以上就是本期讲的内容,另外如果你对这方面还不熟,刚学不久,建议先去小编的Python交流.裙 :一久武其而而流一思(数字的谐音)转换下可以找到了,里面有最新Python教程项目可拿,多跟里面的人交流,比自己摸索效率更高哦!

Python爬虫之cookie的获取、保存和使用【新手必学】的更多相关文章

  1. Python爬虫beautifulsoup4常用的解析方法总结(新手必看)

    今天小编就为大家分享一篇关于Python爬虫beautifulsoup4常用的解析方法总结,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧摘要 如何用beau ...

  2. Python + Selenium +Chrome 批量下载网页代码修改【新手必学】

    Python + Selenium +Chrome 批量下载网页代码修改主要修改以下代码可以调用 本地的 user-agent.txt 和 cookie.txt来达到在登陆状态下 批量打开并下载网页, ...

  3. Python实现一个桌面版的翻译工具【新手必学】

      Python 用了好长一段时间了,起初是基于对爬虫的兴趣而接触到的.随着不断的深入,慢慢的转了其它语言,毕竟工作机会真的太少了.很多技能长时间不去用,就会出现遗忘,也就有了整理一下,供初学者学习和 ...

  4. Python爬虫入门案例:获取百词斩已学单词列表

    百词斩是一款很不错的单词记忆APP,在学习过程中,它会记录你所学的每个单词及你答错的次数,通过此列表可以很方便地找到自己在记忆哪些单词时总是反复出错记不住.我们来用Python来爬取这些信息,同时学习 ...

  5. [Python爬虫] Selenium+Phantomjs动态获取CSDN下载资源信息和评论

    前面几篇文章介绍了Selenium.PhantomJS的基础知识及安装过程,这篇文章是一篇应用.通过Selenium调用Phantomjs获取CSDN下载资源的信息,最重要的是动态获取资源的评论,它是 ...

  6. Python实战:Python爬虫学习教程,获取电影排行榜

    Python应用现在如火如荼,应用范围很广.因其效率高开发迅速的优势,快速进入编程语言排行榜前几名.本系列文章致力于可以全面系统的介绍Python语言开发知识和相关知识总结.希望大家能够快速入门并学习 ...

  7. 使用Python爬虫库BeautifulSoup遍历文档树并对标签进行操作详解(新手必学)

    为大家介绍下Python爬虫库BeautifulSoup遍历文档树并对标签进行操作的详细方法与函数下面就是使用Python爬虫库BeautifulSoup对文档树进行遍历并对标签进行操作的实例,都是最 ...

  8. Python爬虫老是被封的解决方法【面试必问】

    在爬取的过程中难免发生 ip 被封和 403 错误等等,这都是网站检测出你是爬虫而进行反爬措施,在这里为大家总结一下 Python 爬虫动态 ip 代理防止被封的方法. PS:另外很多人在学习Pyth ...

  9. Python学习笔记—自动化部署【新手必学】

      前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:唯恋殊雨   目录 pexpect fabric pexpect P ...

随机推荐

  1. java多线程与线程并发四:线程范围内的共享数据

    当多个线程操作同一个共有数据时,一个线程对共有数据的改变会影响到另一个线程.比如下面这个例子:两个线程调用同一个对象的的方法,一个线程的执行结果会影响另一个线程. package com.sky.th ...

  2. 领扣(LeetCode)删除链表中的节点 个人题解

    请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点. 现有一个链表 -- head = [4,5,1,9],它可以表示为: 4 -> 5 -> 1 - ...

  3. SIGCHLD waitpid, 小心子进程结束事件被偷了

    原本项目中依赖子进程执行的地方,都使用jni调用java层的ProcessManager,换了c++ACE框架后,发现这些任务都很慢,调试才发现所有子进程执行的任务都必须等待到reactor超时才返回 ...

  4. NPM 源的管理器nrm

    作为一个 NPM 源管理器,nrm允许快速地在如下 NPM 源间切换: 列表项目 npm cnpm strongloop enropean australia nodejitsu taobao Ins ...

  5. 小白学 Python 爬虫(4):前置准备(三)Docker基础入门

    人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...

  6. H3C交换机DHCP基础配置案例 v7版本

    一.需求 要求在Switch A上配置DHCP服务器功能实现:• 为网络内的客户端动态分配 10.1.1.0/24 网段内的 IP 地址.租用有效期限. DNS 信息.网关地址等配置信息:• 根据 S ...

  7. 迈进java初中级程序员分水岭是否合格?十个题告诉你!

    前言 不论你是职场新人还是步入职场N年的职场新人大哥大~当然这个N<3~,我能担保你答不对这十个题~不要问我为什么这么自信~,这些个题还是"有水平"的javase的基础题,传 ...

  8. 个人收藏--未整理—C# 上传下载文件

    Winform下载文件 /// <summary> /// 下载文件 /// </summary> /// <param name="URL"> ...

  9. centos 7 MysSQL 5.6.39 源码安装

    MySQL 5.6.39 二进制安装 CentOS 7 将默认数据库MySQL替换成了Mariadb. 这里会从系统的环境准备开始一步一步安装. 环境准备 系统版本 内核版本 IP地址 Centos ...

  10. Mysql密码忘记怎么修改?

    做开发的过程中多少会用到MySQL数据库,所以忘记密码也就成为一些马虎的同学的家常便饭了,今天发布一个忘记MySQL密码如何修改的文章作为记录. 1>首先将MySQL的服务关闭,两种方法:1,打 ...