方法一通过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种方法相关推荐

  1. python创建空字典什么意思_Python创建空列表的字典2种方法详解

    如果要在 Python 中创建键值是空列表的字典,有多种方法,但是各种方法之间是否由区别?需要作实验验证,并且分析产生的原因.本文针对两种方法做了实验和分析. 如果要在 Python 中创建一个键值都 ...

  2. python统计中文字符的个数_python统计中文字符数量的两种方法

    方法一: def str_count(str): '''找出字符串中的中英文.空格.数字.标点符号个数''' count_en = count_dg = count_sp = count_zh = c ...

  3. 苹果6p计算机在哪里设置方法,苹果恢复出厂设置在哪里 两种方法设置【图文】...

    苹果 手机虽然有着防水的功能,我们也切勿将它放在潮湿的环境之下,尤其是厕所与 厨房 ,更要严令禁止存放.除此之外,我们在为苹果手机充电的时候也要适可而止,若是超过八个小时,便可能缩短手机电池的使用寿命 ...

  4. 前台setcookie之后从后台取出来_后台设置Cookie值,前台进行获取

    后台设置Cookie值,前台进行获取 通过cookie取得用户的个性化信息 注意事项:1.中文的存在,需要进行utf-8的编码,之后再进行解码即可,避免乱码. 之所以 有时会用到 cookie.set ...

  5. python爬虫cookie池 与ip绑定_Python爬虫:设置Cookie解决网站拦截并爬取蚂蚁短租

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: Eastmount PS:如有需要Python学习资料的小伙伴可以加 ...

  6. linux临时配置mac地址,Linux获取网卡型号、mac地址、修改IP地址的几种方法

    1.获取所有有(无)网卡型号 方法一.ifconfig 用法:ifconfig | grep | cut -d ':' -f 1 ubuntu root@ubuntu:~# ifconfig | gr ...

  7. Java:对double值进行四舍五入,保留两位小数的几种方法

    转载自   Java:对double值进行四舍五入,保留两位小数的几种方法 1. 功能 将程序中的double值精确到小数点后两位.可以四舍五入,也可以直接截断. 比如:输入12345.6789,输出 ...

  8. dwr框架查看外放方法_硬核!教你三种方法,实现微信自定义修改地区!

    前几天,有小伙伴问怎样自定义修改微信地区?当时说的第二天分享,结果在录制第二种方法的时候,突发意外,出现"微信以停止运行"的状况,明明早上还好好的,怎么就打不开了呢?也木有做任何操 ...

  9. LoadRunner设置检查点的几种方法介绍

    LoadRunner设置检查点的几种方法介绍 发布时间: 2011-5-03 11:53    作者: 一米阳光做测试    来源: 51Testing软件测试网采编 字体:  小  中  大  | ...

  10. Vue父组件访问子组件属性和方法、父子组件双向绑定(两种方法)

    Vue父组件访问子组件属性和方法.父子组件双向绑定(两种方法) 1. 使用vue-cli创建项目 目录结构如下图: 2. 编写代码 src/components/HelloWorld.vue < ...

最新文章

  1. 其他算法-高斯混合模型
  2. 1136 A Delayed Palindrome
  3. C++ 复制vector值到array,复制 array 到jintArray
  4. C语言结构体与联合体
  5. sed 学习笔记(未完成)
  6. HALCON示例程序vessel.hdev血管的分割与测量
  7. ASP.NET MVC Global.cs - 应用程序事件
  8. Knapsack Cryptosystem【折半+查找】
  9. 定时任务crontab
  10. Android代码实现控件闪烁效果
  11. python可视化工具bokeh_浅谈python可视化包Bokeh
  12. Java基础学习总结(175)——分布式ID的9种生成方式总结
  13. 灯效控制器和rgb控制器_还有什么不能RGB?TT发布Level 20 RGB BattleStation电竞桌
  14. c语言知识点总完整版pdf,C语言知识点总结 重点版.pdf
  15. 铁塔基站三相有功电能无线计量仪表外置互感器-安科瑞 顾月
  16. pdf文档安全权限去除
  17. 实训(一)学生管理系统
  18. Python:蒙特卡罗方法模拟解决三门问题
  19. 【六】【vlc-android】vlc的decoder控制层传输数据与ffmpeg视频解码模块decoder层的数据交互流程源码分析
  20. jumpserver

热门文章

  1. RHCE 学习笔记(5)- 本地用户和组的管理
  2. English trip EM2-LP-2A Around the world Teacher:Taylor
  3. SpringBoot2.x 同个文件的加载顺序,静态资源文件
  4. CentOS 7下安装samba
  5. [BZOJ3456]城市规划
  6. BZOJ 1211: [HNOI2004]树的计数 purfer序列
  7. 自学hadoop(三)
  8. Float,Double单双精度在线转换成二进制
  9. Pandas入门教程(一)
  10. Python如何运行.ipynb文件并将其转化为.py文件