Python爬虫(三)cookie和session

什么是Session?

由于Http协议具有无状态性,也就是他对事物处理没有记忆能力。当我们向web站点发送请求时,服务器并不知道用户的信息。这会带来不便,比较典型的就是淘宝的购物车,当我们向往购物车里添加商品时,由于无状态性,服务器并不能分辨不同的用户。因此,我们需要标识用户。现实中,淘宝服务器会为用户创建Session,它唯一标识了这个用户并进行跟踪。Session就是指我们打开一个网站到我们关闭浏览器的一系列的过程。Session是保存在服务器中的,它有一定的生命周期,当我们长时间
没有访问该网站,服务器会自动删掉该Session。

然而服务器端是如何识别特定的用户的呢?

什么是cookies?

我们先给出维基百科上二者的定义:

cookies指某些网站为了辨别用户身份而存储在用户本地终端上的数据(通常经过加密),目前使用最广泛的cookie标准是网景公司制定的标准上进行扩展后的产物。

事实上,在第一次创建Session时,服务器创建一个Session ID并且告知客户端在cookies中记录下来。当每次发送一个Http请求时,客户端都会发送相应的cookies信息至服务器,也即包括Session ID,这样,服务器便能够分辨用户。

cookies和Session的区别?

  • 存放位置不同,Session存放在服务器中,而cookies存放在客户端
  • cookie不安全, cookie存放在本地,可以进行修改欺骗
  • session会保存在服务器上一定时间,会过期
  • 单个cookie保存数据不超过4k。很多浏览器限制一个站点最多保存20个

使用cookies进行模拟登录

http模块提供了几种类型的CookieJar对象用于管理存储cookie,并向传出的http请求添加cookie。

该模块有四种主要的对象:

  • CookieJar:管理存储cookie,向传出的http请求添加cookie,且cookie存储在内存中,CookieJar实例回收后cookie即消失。
  • FileCookieJar:使用文件管理cookie。
  • MozillaCookieJar:创建与mocilla浏览器cookie.txt兼容的FileCookieJar实例。
  • LWPCookieJar:创建与libwww-perl标准兼容的Set-Cookie3格式的FileCookieJar实例。

这四者的派生关系为:CookieJar–>FileCookieJar–>MozillaCookieJar–>LWPCookieJar。

下面通过模拟登录人人网讲解cookieJar的使用方法。

第一步,我们先要创建一个请求管理器,这里我们使用FileCookieJar的子类MozillaCookieJar来保存cookie

urllib中的urlopen()函数不支持验证、cookie或者其他的HTTP高级功能。我们可以使用build_opener()函数创建Opener对象来支持这些功能。该函数返回一个OpenerDirector实例。

filename = 'cookie.txt'  # 创建文本保存cookie
#创建cookiejar实例对象
cookie=cookiejar.MozillaCookieJar(filename)

#根据创建的cookie生成cookie的管理器
cookie_handler=request.HTTPCookieProcessor(cookie)

#请求http请求管理器
http_handler=request.HTTPHandler()

#创建https管理器
https_handler=request.HTTPSHandler()

#创建请求管理器,将三个管理器作为参数属性
#用opener替代urlopen获取请求
opener=request.build_opener(cookie_handler,http_handler,https_handler)  

第二步,我们先进行初次登录并且保存cookie。

#登录URL,需要从登录form的action属性中获取
url='http://www.renren.com/PLogin.do'

#登录所需要的数据,数据为字典形式
data={
	'email':'xxxxxxxxxxx',
	'password':'xxxxxxxxxx'
}
#将数据解析成urlencode格式,并encode为bytes
data=parse.urlencode(data).encode('utf-8')

#req=request.Request(url,data=data)

#正常是使用request.urlopen(),这里用opener
#response=opener.open(req)

response=opener.open(url,data)

#保存cookie
cookie.save(ignore_discard=True, ignore_expires=True)

OpenerDirector.open(url, data=None[, timeout])

打开给定的url,可选地传递给定的数据。它的参数也可以是一个Request对象。该函数的参数、返回值和引发的异常与urlopen()函数一样。

其中save()函数中有两个参数:

  • ignore_discard:表示即使cookies将被丢弃也将它保存下来。
  • ignore_expires:表示如果该文件中cookies已经存在,则覆盖原文件。

第三步,读取cookies并且模拟登录。

url='http://www.renren.com/969036176'
res=opener.open(url)

html=res.read().decode()
with open('renren.html','w',encoding='utf-8') as f:
	f.write(html)

打开获取的renren.html,页面结果为:

完整代码如下:

# -*- coding:utf-8 -*-

from urllib import request,parse
from http import cookiejar

filename = 'cookie.txt'  # 创建文本保存cookie
#创建cookiejar实例对象
cookie=cookiejar.MozillaCookieJar(filename)

#根据创建的cookie生成cookie的管理器
cookie_handler=request.HTTPCookieProcessor(cookie)

#请求http请求管理器
http_handler=request.HTTPHandler()

#创建https管理器
https_handler=request.HTTPSHandler()

#创建请求管理器,将三个管理器作为参数属性
#用opener替代urlopen获取请求
opener=request.build_opener(cookie_handler,http_handler,https_handler)


def login():
	'''
	负责初次登录
	传递用户名和密码,保存cookie
	'''
	#登录URL,需要从登录form的action属性中获取
	url='http://www.renren.com/PLogin.do'
	
	#登录所需要的数据,数据为字典形式
	data={
		'email':'xxxxxxxxxxx',  #在此隐去真实账号和密码
		'password':'xxxxxxxxxx'
	}
	
	#将数据解析成urlencode格式,并encode为bytes
	data=parse.urlencode(data).encode('utf-8')
	
	req=request.Request(url,data=data)
	
	#正常是使用request.urlopen(),这里用opener
	response=opener.open(req)
	
	#保存cookie
	cookie.save(ignore_discard=True, ignore_expires=True)
	
	
def	getHomePage():
	'''
	获取登录后的页面
	'''
	url='http://www.renren.com/969036176'
	res=opener.open(url)
	
	print(cookie)
	
	html=res.read().decode()
	
	with open('renren.html','w',encoding='utf-8') as f:
		f.write(html)
		
if __name__=='__main__':
	#初次登录,获取cookie
	login()
	#利用cookie,模拟登录
	getHomePage()    
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python爬虫中的cookiesession是两个重要的概念。 Cookie是服务器在客户端存储的一小段文本信息,用于记录用户的登录状态、浏览历史等信息。在Python爬虫中,我们可以使用requests库中的cookies参数来设置和获取cookie信息。 Session是一种记录用户状态的机制,它可以在不同的请求之间保持用户的登录状态。在Python爬虫中,我们可以使用requests库中的Session对象来创建一个会话,从而实现登录、保持登录状态等操作。通过Session对象,我们可以方便地管理cookie信息,实现自动登录和持久化会话等功能。 ### 回答2: Python爬虫是指使用Python语言编写程序,自动获取互联网上的信息并进行数据分析或者存储的技术。而CookieSession则是爬虫程序中常用的两种技术,它们的作用是帮助爬虫程序模拟网站的登录情况和维持网站和爬虫程序之间的会话状态,以便进行身份认证和绕过防护机制。 Cookie是存储在浏览器客户端的数据,主要用于表示用户身份、用户访问时间、用户信息等,如用户访问某个网站时会在浏览器中创建一个Cookie,这个Cookie信息会被服务器进行读取和处理。当爬虫程序需要模拟网站登录时,需要获取并保存服务器返回的Cookie,以便后续更好的请求和响应网站数据。Python中通过requests模块进行Cookie的使用。requests模块中有一个Session对象,默认情况下,Session对象会存储Cookie到本地,这就相当于保存了用户的登录状态,方便后面的请求使用。在requests的get和post方法调用时,通过传递session对象作为第一个参数,就可以在整个请求过程中使用保存过的Cookie信息。具体使用方法如下: ``` # 创建session对象 import requests session = requests.Session() # 网站登录请求 session.post(login_url, data=user_data) # 获取用户信息 user_info = session.get(user_url) ``` 而Session则是保存Web应用程序会话的数据结构,即Session是由Web应用程序使用的一种机制,该机制通过在客户端存储或通过增加HTTP Cookie的方式传递标识符来维护状态信息。Session的数据保存在服务器端,每次请求时都会带上保存在Cookie中的Session ID,服务器根据Session ID来查找对应的Session对象。在Python中,我们可以通过Flask、Django等Web框架来实现Session的使用。 综上,CookieSession爬虫程序中非常重要的技术,能够帮助爬虫程序更好地模拟登录和保持会话,让爬虫程序更快速、准确地抓取网站信息。但需要注意的是,爬虫程序的使用需要遵守网站的相关规定和道德底线,不得违反相关法律法规和道德规范。 ### 回答3: Python爬虫是一个广泛应用于网络数据抓取和处理的技术。在Python爬虫中,cookiesession是非常重要的概念,它们有助于实现身份验证和保持用户会话状态。在本篇文章中,我们将具体介绍cookiesessionPython爬虫中的应用。 1. Cookie Cookie是一种客户端存储机制,通常由Web服务器在HTTP响应头中返回。Cookie可以包含存储在客户端计算机上的信息,并在相应的HTTP请求中发送回服务器。Python中的Requests库可以方便地处理Cookie,使用方法如下: ``` import requests # 创建Session对象 s=requests.Session() # 访问登陆页,获取cookie s.get('http://www.example.com/login') # 从响应中读取cookie cookie=s.cookies.get_dict() # 发送带有cookie的请求 s.get('http://www.example.com/user',cookies=cookie) ``` 从上面的代码可以看出,通过创建一个Session对象,我们可以在访问登陆页时获取Cookie,在后续请求中将Cookie发送回服务器。这种方式可以模拟用户登陆状态,方便爬取需要用户身份验证的数据。 2. Session Session是另一种用于跟踪用户会话状态的机制。与Cookie不同,Session是由Web服务器在服务器端管理的。当用户发送请求时,服务器会为用户创建一个Session,该Session在Web服务器上存储。Python中也可以方便地使用Session来处理会话状态,使用方法如下: ``` import requests # 创建Session对象 s=requests.Session() # 在Session中发起请求 s.get('http://www.example.com/user') ``` 通过创建一个Session对象,我们可以在爬取时保持用户的会话状态,实现一些需要用户登录后才能进行的操作。与Cookie不同,Session的内部机制是由Web服务器实现的,并不需要我们自己去处理。 总结 从上述内容可以看出,CookieSessionpython爬虫中起着至关重要的作用。Cookie可以方便地处理用户身份验证,从而实现一些需要用户身份验证的操作。而Session则可以方便地处理用户会话状态,为用户提供一种无缝的体验,在爬虫中也有广泛的应用。因此,Python爬虫开发者应该熟练掌握CookieSession的用法,以便在爬取数据时更加高效、方便。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值