python获取cookie值的方法_Python获取Cookie、设置Cookie的N种方法
方法一通过python的requests包:
import requests
url = "https://fanyi.baidu.com"
res = requests.get(url)
ck = res.cookies
print(ck)
print(type(ck))
print(ck.keys()) # 获取cookie中所有键名,以list格式输出
print(ck.items())
# 输出
, ]>
['BAIDUID', 'locale']
[('BAIDUID', '3A6AD66348038CBCB3BB6927F4A2CD77:FG=1'), ('locale', 'zh')]
0
1
2
3
4
5
6
7
8
9
10
11
12
13
importrequests
url="https://fanyi.baidu.com"
res=requests.get(url)
ck=res.cookies
print(ck)
print(type(ck))
print(ck.keys())# 获取cookie中所有键名,以list格式输出
print(ck.items())
# 输出
,]>
['BAIDUID','locale']
[('BAIDUID','3A6AD66348038CBCB3BB6927F4A2CD77:FG=1'),('locale','zh')]
获取cookies是通过response的cookies 属性,可以通过res.cookies["cookie_name"]的方式获取。
并且需要注意的是,这个是一个RequestCookieJar的实例,也就是说,在requests的操作里的cookie一般都是包装到了
看源码:
class RequestsCookieJar(cookielib.CookieJar, collections.MutableMapping):
def get(self, name, default=None, domain=None, path=None):
try:
return self._find_no_duplicates(name, domain, path)
except KeyError:
return default
def set(self, name, value, **kwargs):
# support client code that unsets cookies by assignment of a None value:
if value is None:
remove_cookie_by_name(self, name, domain=kwargs.get('domain'), path=kwargs.get('path'))
return
if isinstance(value, Morsel):
c = morsel_to_cookie(value)
else:
c = create_cookie(name, value, **kwargs)
self.set_cookie(c)
return c
def iterkeys(self):
for cookie in iter(self):
yield cookie.name
def keys(self):
return list(self.iterkeys())
def itervalues(self):
for cookie in iter(self):
yield cookie.value
def values(self):
return list(self.itervalues())
def iteritems(self):
for cookie in iter(self):
yield cookie.name, cookie.value
def items(self):
return list(self.iteritems())
0
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
classRequestsCookieJar(cookielib.CookieJar,collections.MutableMapping):
defget(self,name,default=None,domain=None,path=None):
try:
returnself._find_no_duplicates(name,domain,path)
exceptKeyError:
returndefault
defset(self,name,value,**kwargs):
# support client code that unsets cookies by assignment of a None value:
ifvalueisNone:
remove_cookie_by_name(self,name,domain=kwargs.get('domain'),path=kwargs.get('path'))
return
ifisinstance(value,Morsel):
c=morsel_to_cookie(value)
else:
c=create_cookie(name,value,**kwargs)
self.set_cookie(c)
returnc
defiterkeys(self):
forcookieiniter(self):
yieldcookie.name
defkeys(self):
returnlist(self.iterkeys())
defitervalues(self):
forcookieiniter(self):
yieldcookie.value
defvalues(self):
returnlist(self.itervalues())
defiteritems(self):
forcookieiniter(self):
yieldcookie.name,cookie.value
defitems(self):
returnlist(self.iteritems())
里面包括了很多的方法,可以根据需要进行使用,通常就是get, set,keys, itemitems等,和字典很像!
重点
如果需要在请求中添加cookie,可以实例化一个RequestCookieJar的类,然后把值set进去,最后在get,post方法里面指定cookies参数就行了,如下:
import requests
from requests.cookies import RequestsCookieJar
url = "http://fanyi.baidu.com/v2transapi"
cookie_jar = RequestsCookieJar()
cookie_jar.set("BAIDUID", "B1CCDD4B4BC886BF99364C72C8AE1C01:FG=1", domain="baidu.com")
res = requests.get(url, cookies=cookie_jar)
print res.status_code
# 输出 200 则为正确
0
1
2
3
4
5
6
7
8
9
10
11
importrequests
fromrequests.cookiesimportRequestsCookieJar
url="http://fanyi.baidu.com/v2transapi"
cookie_jar=RequestsCookieJar()
cookie_jar.set("BAIDUID","B1CCDD4B4BC886BF99364C72C8AE1C01:FG=1",domain="baidu.com")
res=requests.get(url,cookies=cookie_jar)
printres.status_code
# 输出 200 则为正确
方法二使用python的cookielib包:
import cookielib,urllib2
loginUrl = "https://fanyi.baidu.com"
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
urllib2.install_opener(opener)
res = urllib2.urlopen(loginUrl)
opener.close()
for index, cookie in enumerate(cj):
print '[', index, ']', cookie
输出:
[ 0 ]
[ 1 ]
0
1
2
3
4
5
6
7
8
9
10
11
12
13
importcookielib,urllib2
loginUrl="https://fanyi.baidu.com"
cj=cookielib.CookieJar()
opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
urllib2.install_opener(opener)
res=urllib2.urlopen(loginUrl)
opener.close()
forindex,cookieinenumerate(cj):
print'[',index,']',cookie
输出:
[0]
[1]
方法三使用python的httplib包:
import httplib
cj = ''
header = {'Host': 'fanyi.baidu.com',
'Accept-Language': 'zh-CN',
'Connection': 'Keep-Alive',
'Accept-Encoding': 'gzip,deflate',
'Accept': 'text/html, application/xhtml+xml, */*',
'User-Agent': 'Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/28.0.1500.71 Chrome/28.0.1500.71 Safari/537.36'
}
# con = httplib.HTTPConnection('fanyi.baidu.com') # 因为网站使用的是https协议,所以res.status会返回301重定向
con = httplib.HTTPSConnection('fanyi.baidu.com') # 建立请求:fanyi.baidu.com/v2transapi
con.request(method='GET', url='/v2transapi', headers=header)
res = con.getresponse()
res.read() # 调用read函数以后,才能获取content。
con.close()
print(res.status) # 返回状态码
if res.getheader('Set-Cookie') != None: # 判断是否存在Set-Cookie,有的话,将cookie保存起来
print(res.getheaders()) # 获取所有头部信息
print(res.getheader('Set-Cookie')) # 获取远程服务器响应后设置的全部Cookie信息
cj = res.getheader('Set-Cookie').split(';')[0]
print(cj)
else:
print('got no cookie')
exit()
# 输出
200
[('content-length', '57'), ('content-encoding', 'gzip'), ('set-cookie', 'locale=zh; expires=Sat, 01-Feb-2020 03:26:10 GMT; path=/; domain=.baidu.com, BAIDUID=F3B1D486AEEF5CB69BCDBF801064CBEE:FG=1; expires=Mon, 06-Apr-20 03:26:10 GMT; max-age=31536000; path=/; domain=.baidu.com; version=1'), ('vary', 'Accept-Encoding'), ('server', 'Apache'), ('date', 'Sun, 07 Apr 2019 03:26:10 GMT'), ('p3p', 'CP=" OTI DSP COR IVA OUR IND COM "'), ('content-type', 'application/json')]
locale=zh; expires=Sat, 01-Feb-2020 03:26:10 GMT; path=/; domain=.baidu.com, BAIDUID=F3B1D486AEEF5CB69BCDBF801064CBEE:FG=1; expires=Mon, 06-Apr-20 03:26:10 GMT; max-age=31536000; path=/; domain=.baidu.com; version=1
locale=zh
0
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
importhttplib
cj=''
header={'Host':'fanyi.baidu.com',
'Accept-Language':'zh-CN',
'Connection':'Keep-Alive',
'Accept-Encoding':'gzip,deflate',
'Accept':'text/html, application/xhtml+xml, */*',
'User-Agent':'Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/28.0.1500.71 Chrome/28.0.1500.71 Safari/537.36'
}
# con = httplib.HTTPConnection('fanyi.baidu.com') # 因为网站使用的是https协议,所以res.status会返回301重定向
con=httplib.HTTPSConnection('fanyi.baidu.com')# 建立请求:fanyi.baidu.com/v2transapi
con.request(method='GET',url='/v2transapi',headers=header)
res=con.getresponse()
res.read()# 调用read函数以后,才能获取content。
con.close()
print(res.status)# 返回状态码
ifres.getheader('Set-Cookie')!=None:# 判断是否存在Set-Cookie,有的话,将cookie保存起来
print(res.getheaders())# 获取所有头部信息
print(res.getheader('Set-Cookie'))# 获取远程服务器响应后设置的全部Cookie信息
cj=res.getheader('Set-Cookie').split(';')[0]
print(cj)
else:
print('got no cookie')
exit()
# 输出
200
[('content-length','57'),('content-encoding','gzip'),('set-cookie','locale=zh; expires=Sat, 01-Feb-2020 03:26:10 GMT; path=/; domain=.baidu.com, BAIDUID=F3B1D486AEEF5CB69BCDBF801064CBEE:FG=1; expires=Mon, 06-Apr-20 03:26:10 GMT; max-age=31536000; path=/; domain=.baidu.com; version=1'),('vary','Accept-Encoding'),('server','Apache'),('date','Sun, 07 Apr 2019 03:26:10 GMT'),('p3p','CP=" OTI DSP COR IVA OUR IND COM "'),('content-type','application/json')]
locale=zh;expires=Sat,01-Feb-202003:26:10GMT;path=/;domain=.baidu.com,BAIDUID=F3B1D486AEEF5CB69BCDBF801064CBEE:FG=1;expires=Mon,06-Apr-2003:26:10GMT;max-age=31536000;path=/;domain=.baidu.com;version=1
locale=zh
方法四使用python的selenium包:
用的比较少的selenium包,用于模拟登陆并获取cookie。
import time,random
from selenium import webdriver
import requests
from urllib import request
from lxml import etree
driver = webdriver.Chrome(executable_path=r'/Applications/Google Chrome.app/chromedriver')
driver.get('http://www.renren.com/PLogin.do')
time.sleep(2)
driver.find_element_by_id('email').clear()
driver.find_element_by_id('email').send_keys('myusername') # 输入用户名
driver.find_element_by_id('password').clear()
driver.find_element_by_id('password').send_keys('mypassword') # 输入密码
img_url = 'http://icode.renren.com/getcode.do?t=web_login&rnd='+str(random.random())
request.urlretrieve(img_url,'renren_yzm.jpg')
try:
driver.find_element_by_id('icode').clear()
img_res = input('输入验证码:') # 如果需要输入验证码,可以手工,或者接口给打码平台
driver.find_element_by_id('icode').send_keys(img_res)
except:
pass
driver.find_element_by_id('autoLogin').click() # 自动登陆
driver.find_element_by_id('login').click() # 登陆
time.sleep(3)
cookie_items = driver.get_cookies() # 获取cookie值
post = {} # 保存cookie值
for cookie in cookie_items:
post[cookie['name']] = cookie['value']
print(post['t']) # 人人网登陆后需要保持登陆的cookie信息
driver.quit() # 退出selenium
# ------------------------------------------------------------
url = 'http://www.renren.com/265025131/profile'
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36',
'Cookie':'t='+post['t'],
}
response = requests.get(url,headers=headers)
print('-'*50)
html = etree.HTML(response.text)
title = html.xpath('//title/text()')
print('目前得到的页面信息',title)
print(response.url)
0
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
importtime,random
fromseleniumimportwebdriver
importrequests
fromurllibimportrequest
fromlxmlimportetree
driver=webdriver.Chrome(executable_path=r'/Applications/Google Chrome.app/chromedriver')
driver.get('http://www.renren.com/PLogin.do')
time.sleep(2)
driver.find_element_by_id('email').clear()
driver.find_element_by_id('email').send_keys('myusername')# 输入用户名
driver.find_element_by_id('password').clear()
driver.find_element_by_id('password').send_keys('mypassword')# 输入密码
img_url='http://icode.renren.com/getcode.do?t=web_login&rnd='+str(random.random())
request.urlretrieve(img_url,'renren_yzm.jpg')
try:
driver.find_element_by_id('icode').clear()
img_res=input('输入验证码:')# 如果需要输入验证码,可以手工,或者接口给打码平台
driver.find_element_by_id('icode').send_keys(img_res)
except:
pass
driver.find_element_by_id('autoLogin').click()# 自动登陆
driver.find_element_by_id('login').click()# 登陆
time.sleep(3)
cookie_items=driver.get_cookies()# 获取cookie值
post={}# 保存cookie值
forcookieincookie_items:
post[cookie['name']]=cookie['value']
print(post['t'])# 人人网登陆后需要保持登陆的cookie信息
driver.quit()# 退出selenium
# ------------------------------------------------------------
url='http://www.renren.com/265025131/profile'
headers={
'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36',
'Cookie':'t='+post['t'],
}
response=requests.get(url,headers=headers)
print('-'*50)
html=etree.HTML(response.text)
title=html.xpath('//title/text()')
print('目前得到的页面信息',title)
print(response.url)
还有很多方法可以实现获取cookie和设置cookie,有待学习研究。
python获取cookie值的方法_Python获取Cookie、设置Cookie的N种方法相关推荐
- python创建空字典什么意思_Python创建空列表的字典2种方法详解
如果要在 Python 中创建键值是空列表的字典,有多种方法,但是各种方法之间是否由区别?需要作实验验证,并且分析产生的原因.本文针对两种方法做了实验和分析. 如果要在 Python 中创建一个键值都 ...
- python统计中文字符的个数_python统计中文字符数量的两种方法
方法一: def str_count(str): '''找出字符串中的中英文.空格.数字.标点符号个数''' count_en = count_dg = count_sp = count_zh = c ...
- 苹果6p计算机在哪里设置方法,苹果恢复出厂设置在哪里 两种方法设置【图文】...
苹果 手机虽然有着防水的功能,我们也切勿将它放在潮湿的环境之下,尤其是厕所与 厨房 ,更要严令禁止存放.除此之外,我们在为苹果手机充电的时候也要适可而止,若是超过八个小时,便可能缩短手机电池的使用寿命 ...
- 前台setcookie之后从后台取出来_后台设置Cookie值,前台进行获取
后台设置Cookie值,前台进行获取 通过cookie取得用户的个性化信息 注意事项:1.中文的存在,需要进行utf-8的编码,之后再进行解码即可,避免乱码. 之所以 有时会用到 cookie.set ...
- python爬虫cookie池 与ip绑定_Python爬虫:设置Cookie解决网站拦截并爬取蚂蚁短租
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: Eastmount PS:如有需要Python学习资料的小伙伴可以加 ...
- linux临时配置mac地址,Linux获取网卡型号、mac地址、修改IP地址的几种方法
1.获取所有有(无)网卡型号 方法一.ifconfig 用法:ifconfig | grep | cut -d ':' -f 1 ubuntu root@ubuntu:~# ifconfig | gr ...
- Java:对double值进行四舍五入,保留两位小数的几种方法
转载自 Java:对double值进行四舍五入,保留两位小数的几种方法 1. 功能 将程序中的double值精确到小数点后两位.可以四舍五入,也可以直接截断. 比如:输入12345.6789,输出 ...
- dwr框架查看外放方法_硬核!教你三种方法,实现微信自定义修改地区!
前几天,有小伙伴问怎样自定义修改微信地区?当时说的第二天分享,结果在录制第二种方法的时候,突发意外,出现"微信以停止运行"的状况,明明早上还好好的,怎么就打不开了呢?也木有做任何操 ...
- LoadRunner设置检查点的几种方法介绍
LoadRunner设置检查点的几种方法介绍 发布时间: 2011-5-03 11:53 作者: 一米阳光做测试 来源: 51Testing软件测试网采编 字体: 小 中 大 | ...
- Vue父组件访问子组件属性和方法、父子组件双向绑定(两种方法)
Vue父组件访问子组件属性和方法.父子组件双向绑定(两种方法) 1. 使用vue-cli创建项目 目录结构如下图: 2. 编写代码 src/components/HelloWorld.vue < ...
最新文章
- 其他算法-高斯混合模型
- 1136 A Delayed Palindrome
- C++ 复制vector值到array,复制 array 到jintArray
- C语言结构体与联合体
- sed 学习笔记(未完成)
- HALCON示例程序vessel.hdev血管的分割与测量
- ASP.NET MVC Global.cs - 应用程序事件
- Knapsack Cryptosystem【折半+查找】
- 定时任务crontab
- Android代码实现控件闪烁效果
- python可视化工具bokeh_浅谈python可视化包Bokeh
- Java基础学习总结(175)——分布式ID的9种生成方式总结
- 灯效控制器和rgb控制器_还有什么不能RGB?TT发布Level 20 RGB BattleStation电竞桌
- c语言知识点总完整版pdf,C语言知识点总结 重点版.pdf
- 铁塔基站三相有功电能无线计量仪表外置互感器-安科瑞 顾月
- pdf文档安全权限去除
- 实训(一)学生管理系统
- Python:蒙特卡罗方法模拟解决三门问题
- 【六】【vlc-android】vlc的decoder控制层传输数据与ffmpeg视频解码模块decoder层的数据交互流程源码分析
- jumpserver
热门文章
- RHCE 学习笔记(5)- 本地用户和组的管理
- English trip EM2-LP-2A Around the world Teacher:Taylor
- SpringBoot2.x 同个文件的加载顺序,静态资源文件
- CentOS 7下安装samba
- [BZOJ3456]城市规划
- BZOJ 1211: [HNOI2004]树的计数 purfer序列
- 自学hadoop(三)
- Float,Double单双精度在线转换成二进制
- Pandas入门教程(一)
- Python如何运行.ipynb文件并将其转化为.py文件