获取cookie的核心目的无非就是实现登陆,一般来说我们实现请求大致也有两种方式,第一种是selenium,第二种是包含requests,urllib等的其他类型,那么cookie的获取也是针对这样的结构而言的

接下来开干!!

1.利用selenium+phantomjs无界面浏览器的形式访问网站,再获取cookie值:
(当然这里也包括+webdriver)

# 导入模块
from selenium import webdriverdriver=webdriver.PhantomJS()
url="https://et.xiamenair.com/xiamenair/book/findFlights.action?lang=zh&tripType=0&queryFlightInfo=XMN,PEK,2018-01-15"
driver.get(url)#接下来注意了,要开始获取cookie了.# 获取cookie列表
cookie_list=driver.get_cookies()#这里主要是使用自带的get_cookies方法# 格式化打印cookie
for cookie in cookie_list:cookie_dict[cookie['name']]=cookie['value']
print(cookie_dict)

有些人说,最后打印的话,为什么还要弄个循环呢,那么我就给你看看cookie的源格式,这也是为什么要取cookie_list的原因

[{‘domain’: ‘.et.xiamenair.com’, ‘expiry’: 1577686388, ‘httpOnly’: False, ‘name’: ‘_dc_gtm_UA-96517318-3’, ‘path’: ‘/’, ‘secure’: False, ‘value’: ‘1’},
{‘domain’: ‘.et.xiamenair.com’, ‘expiry’: 1577772728, ‘httpOnly’: False, ‘name’: ‘_gid’, ‘path’: ‘/’, ‘secure’: False, ‘value’: ‘GA1.3.10695887.1577686328’},
{‘domain’: ‘.et.xiamenair.com’, ‘expiry’: 1640758328, ‘httpOnly’: False, ‘name’: ‘_ga’, ‘path’: ‘/’, ‘secure’: False, ‘value’: ‘GA1.3.346851281.1577686328’},
{‘domain’: ‘et.xiamenair.com’, ‘expiry’: 1593238326.401786, ‘httpOnly’: False, ‘name’: ‘Webtrends’, ‘path’: ‘/’, ‘secure’: False, ‘value’: ‘221.194.139.166.1577686326367810’},
{‘domain’: ‘.et.xiamenair.com’, ‘httpOnly’: False, ‘name’: ‘Hm_lpvt_a0f83bbc1d09b6e5a33928301f402485’, ‘path’: ‘/’, ‘secure’: False, ‘value’: ‘1577686328’},
{‘domain’: ‘.xiamenair.com’, ‘expiry’: 1585462327, ‘httpOnly’: False, ‘name’: ‘_gcl_au’, ‘path’: ‘/’, ‘secure’: False, ‘value’: ‘1.1.1071047259.1577686328’},
{‘domain’: ‘.et.xiamenair.com’, ‘expiry’: 1609222327, ‘httpOnly’: False, ‘name’: ‘Hm_lvt_a0f83bbc1d09b6e5a33928301f402485’, ‘path’: ‘/’, ‘secure’: False, ‘value’: ‘1577686328’},
{‘domain’: ‘et.xiamenair.com’, ‘httpOnly’: False, ‘name’: ‘JSESSIONID’, ‘path’: ‘/xiamenair’, ‘secure’: False, ‘value’: ‘fITPgukOvdHrSaj8Jyo25z+Q.mfb2cServer3’}]

看明白了吧,cookie本来就是这个格式的
就是一个列表,内含n多个字典,字典里面还有各个字段,比如domain,expiry,httpOnly,name,path,secure,value等

第一种咱们看了,接下来看第二种
第二种相对来说要多点,我们根据不同的请求方法来:
但是有一个共同点,基本都是使用cookiejar来做

1.首先来说urllib,我们只针对python3

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

有人会说,如果我想看cookie的具体东西,我没打印的情况下,我怎么知道cookie的属性有哪些,这确实,说的没毛病,那么我再来一招:

以上面为例,cookiejar获取的其实是一个对象列表,列表可以遍历,但是对象不可以遍历,那怎么办呢?
for i in cookie:
print(“我是k”, i.dict.items())
这样来,我们对cookiejar进行遍历,得到对象i,那么再对对象i进行字典化的读取,就可以了

2.再来,我们再来说说requests请求方式:

一般携带Cookie请求有三种方式

三种Cookie请求方式

第一种:cookie放在headers中

首先找到登陆之后的Cookie和User-Agent,然后将User-Agent和Cookie复制到程序里面,如下:import requestsurl = "https://blog.csdn.net/williamgavin"headers = {"User_Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36","Cookie" : "这个还是算了吧,用你们自己的博客试 ^-^ "
}response = requests.get(url, headers = headers )with open("csdn.html", "w", encoding="utf-8") as f:f.write(response.content.decode());

第二种:cookie字典传给cookies参数
这里以请求人人网为例:

找到对应的cookie和User-Agent
import requestsurl = "http://www.renren.com/967272361/profile"
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36",
}# 不带上Cookie就访问不了这个页面
cookie = "anonymid=jk63khrk-y97r4p; _r01_=1; ln_uact=mr_mao_hacker@163.com; ln_hurl=http://hdn.xnimg.cn/photos/hdn421/20180720/1740/main_JAWQ_0aa000000ceb195a.jpg; _ga=GA1.2.273332130.1532825428; depovince=HUN; JSESSIONID=abcE5k0CiAJDc9ESVEcuw; ick_login=026ba348-e4e9-4871-9ce3-5868b95cfdd3; first_login_flag=1; loginfrom=syshome; wp_fold=0; BAIDU_SSP_lcr=https://www.baidu.com/link?url=VRx_HKUd53I5rYWZHvrQ9VVLotqST6-jtaZDlscFYCO&wd=&eqid=e957aec400037928000000065b64fcab; ick=64518f30-9a22-47df-b3c3-4114f185c3c6; t=8fcf47068763c279eea2620b51b7a3311; societyguester=8fcf47068763c279eea2620b51b7a3311; id=967272361; xnsid=fd736c63; jebecookies=3f9a3853-3371-4857-8268-308d663ca146|||||; jebe_key=19041c4e-4d38-4dc1-bfb9-124b81afae61%7C33b1d8f602cf6dd5a9834fe6f2bf97f2%7C1533346094265%7C1%7C1533346099750"# 将上面哪个cookie转化成字典类型
cookie_dict = {i.split("=")[0]:i.split("=")[-1] for i in cookie.split("; ")}
response = requests.get(url, headers = headers, cookies = cookie_dict)with open("renren2.html", "w", encoding="utf-8") as f:f.write(response.content.decode())

第三种 先发送post请求,获取cookie,带上cookie请求登陆之后的页面

具有保持功能, 就类似浏览器输入一次密码之后,会自动保留cookie
seesion = requests.seesion()
seesion.post(url, data, headers) # 服务器设置在本地的cookie会保存在本地
seesion.get(url) # 会带上之前保存在seesion中的cookie,能够请求成功

参考:
requests的cookie

完整selenium登陆过程

更全

最明白

cookie获取的两种方法相关推荐

  1. 微信小程序之picker选择器获取值得两种方法

    想要实现的效果: 在选择器选择合适的选项后,页面显示所选择的内容 第一种方法: //wxml页面 <picker bindchange="PickerChange" valu ...

  2. OpenVR设备位置获取的两种方法

    OpenVR 下,获取设备位置的方法有两个:WaitGetPoses 和 GetDeviceToAbsoluteTrackingPose. WaitGetPoses: 会阻塞程序运行,直到底层获取到新 ...

  3. Android 获取UUID两种方法

    第一种:SIM卡唯一标识 + DEVICE_ID(根据不同的手机设备返回IMEI,MEID或者ESN码)+androidId 这种方式获取的UUID是唯一不可变的,但是仅适用于手机中有SIM卡的情况. ...

  4. 在Web项目中保存会话的两种方法:Cookie和Session

    Web浏览器是与Web服务器之间的会话是一个不保持的会话,浏览器发起请求,建立会话,获得结果后,会话就不在了.然而,在涉及到用户登录Web项目中,开发人员必须有一种方法,区分用户登录前后的状态,以便对 ...

  5. python获取绝对路径_python3中获取文件当前绝对路径的两种方法

    方法1: import sys print(sys.argv) 得到文件当前绝对路径字符串的一个列表 ['D:/pycharm/PracticeProject/ClientServerNetworki ...

  6. Python中按值来获取指定键的两种方法

    Python字典中的键是唯一的,但不同的键可以对应同样的值,比如说uid,可以是1001.id同样可以是1001.这样的话通过值来获取指定的键,就不止一个!而且也并不太好处理.这里同样提供两种思路来处 ...

  7. jquery 乱码 传参_jquery获取URL中参数解决中文乱码问题的两种方法

    从A页面通过url传参到B页面时,解析url参数可以用下面两种方法: 方法一:正则分析法 function getQueryString(name) { var reg = new RegExp(&q ...

  8. python字符串成熟编码_python字符串转公式两种方法获取网页编码python版

    在web开发的时候我们经常会遇到网页抓取和分析,各种语言都可以完成这个功能.我喜欢用python实现,因为python提供了很多成熟的模块,可以很方便的实现网页抓取. 但是在抓取过程中会遇到编码的问题 ...

  9. vue 获取请求url_vue 获取url里参数的两种方法小结

    我就废话不多说了,大家还是直接看代码吧~ 第一种: const query = Qs.parse(location.search.substring(1)) let passport = query. ...

最新文章

  1. 教育部:国外经历不得作为高校招聘限制性条件
  2. python—迭代器
  3. python双循环zip_Python 并行遍历zip()函数使用方法
  4. 考研经验交流会【高分前辈】【350分+】
  5. Java web 面试题
  6. 儿童python编程能给孩子带来哪些好处_python编程入门学习对孩子成长有哪些优势?...
  7. 数据库笔记06:创建并管理数据表
  8. World Wind Java开发之九——阶段小结(转)
  9. 前端如何展示商品属性:SKU多维属性状态判断算法的应用-Vue 实现
  10. 三大主流软件负载均衡器对比(LVS VS Nginx VS Haproxy)
  11. MySQL5.5安装到最后一步卡住的解决办法(即使删除了隐藏文件内C:\ProgramData的MySQL以后还是没解决问题)
  12. kafka 消费者组 消费者订阅不同主题_深入了解kafka系列-消费者
  13. ida 安装findcrypto插件
  14. 被使用次数最多的22个Python外部模块
  15. JS - 解决鼠标单击、双击事件冲突问题(同时实现两种事件响应)
  16. 对数似然比LLR公式的问题
  17. 浪擎科技:定位中高端,做灾备蓝海的“弄潮儿”
  18. 【超实用】在微信文章中点击号码直接拨打电话,轻松运营~
  19. 论文翻译-ASTER: An Attentional Scene Text Recognizer with Flexible Rectification
  20. matlab的死区环节,基于SIMULINK对非线性系统死区环节进行仿真.doc

热门文章

  1. 解决Excel打开CSV文件中文乱码问题
  2. 共享充电宝商家合作有什么好处
  3. windows10 Failed to initialize NVML: Unknown Error
  4. 计算机文件复制命令,copy
  5. Linux安装nextcloud教程,CentOS7下NextCloud搭建
  6. 微信小程序动画循环执行
  7. 【Java实现】约瑟夫问题的Java代码实现
  8. 聚合路由器5G+4G是什么意思
  9. Scala压缩解压Zip文件
  10. goodnotes导入文件需要密码,教你一招破解!