美文网首页
2020-07-14--requests--cookie和ses

2020-07-14--requests--cookie和ses

作者: program_white | 来源:发表于2020-07-16 11:45 被阅读0次

cookie和session

本质上都是基于键值对的字符串
session依赖于cookie

两者区别

  • cookie数据存放在客户的浏览器上,session数据放在服务器上
  • cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗(使用用户的cookies获取相关信息
  • session会在一定时间内保存在服务器上。当访问增多,会比较占用服务器的性能
  • 单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。

利弊:

  • 带上cookie、session的好处:很多网站必须登录之后(或者获取某种权限之后)才能能够请求到相关数据
  • 带上cookie、session的弊端:一套cookie和session往往和一个用户对应.请求太快,请求次数太多,容易被服务器识别为爬虫。从而是账号收到损害
  • 使用建议 1.不需要cookie的时候尽量不去使用cookie 2.为了获取登录之后的页面,我们必须发送带有cookies的请求,此时为了确保账号安全应该尽量降低数据采集速度

案例:使用cookies来获取登录之后人人网的响应

使用cookie获取登陆后的人人网页面

首先登陆renren网:
如果未登录,会自动重定向到登录页面进行登录。
如果是登陆状态,那么就会进入自己的页面。

登陆状态下,页面的基本网络状态:

这个cookie中就携带了用户的信息。

代码;

import re

import requests

xurl = 'http://www.renren.com/974752579/'

xheader = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36',
    'Cookie':'anonymid=kck4xa5r-pa8z4r; depovince=GW; _r01_=1; taihe_bi_sdk_uid=5677de687f3dd8d05295eafe23cec432; __utma=151146938.2105069336.1594622364.1594622364.1594622364.1; __utmz=151146938.1594622364.1.1.utmcsr=renren.com|utmccn=(referral)|utmcmd=referral|utmcct=/; JSESSIONID=abcy1G4bSg5nXf9LhNrnx; ick_login=e79ec3ac-fa01-4a79-aab9-68e6a0d0b53e; taihe_bi_sdk_session=11c3fa9621a1373fb77068064eeeb6d3; t=cdca48a7b585fc58dad2db4a8a2d1d359; societyguester=cdca48a7b585fc58dad2db4a8a2d1d359; id=974752579; xnsid=ae5dc9d9; ver=7.0; loginfrom=null; jebecookies=ad4aeb2b-ccf8-44d2-b207-7f500bbace32|||||; wp_fold=0'
}


resp = requests.get(url=xurl,headers=xheader,)

print(resp)
# print(resp.text)
print(resp.content.decode())    

print(re.findall('关注内容',resp.content.decode()))        #查询关注内容的字段

结果:

说明这个请求直接进入了人人网的用户页面,而不是登录页。
如果不写cookie,那么返回的响应将是登陆页的内容。

获取服务器传过来的cookie

当我们第一次访问浏览器时,发送cookie给浏览器,浏览器在服务器端形成该用户session对象,以cookie的形式返回给浏览器,用户再一次登录时,就携带上一次访问时服务器返回的cookie访问服务器,就这样一直循环进行交互。

代码:

import requests

resp = requests.get('https://www.baidu.com')

cookie = resp.cookies    #获取服务器传来的cookie对象
print(cookie)

#将cookie转为dict
cookie_dict  = requests.utils.dict_from_cookiejar(cookie)
print(cookie_dict)

#将dict转为cookie对象
cookie2 = requests.utils.cookiejar_from_dict(cookie_dict)
print(cookie2)

结果:

使用session实现人人网登录

首先查看人人网登录页的前端登陆表单:

根据表单的信息进行sssion登录。

代码:

import re

import requests

xheader = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36',
}



'''具体的提交地址以及数据的格式以具体网站而定'''

xurl = 'http://www.renren.com/PLogin.do'        #登录页面
session = requests.session()           #创建session对象
#发送的数据,具体的数据名称要根据网站的获取不同而定
data = {
    'email':'13840019825',       #自己的账号
    'password':'songbo982514'      #密码
}
#发送登录请求
session.post(url=xurl,headers=xheader,data=data)

#登陆成功后再次发送请求,获取登陆成功后的响应
resp = session.get('http://www.renren.com/971827253')         #971827253为具体的用户的id值 
print(re.findall('关注内容',resp.content.decode()))         #验证是否登陆成功

结果:

说明返回的页面是登陆后的页面。

使用IP代理爬虫

一般情况下,爬虫都是在线形式的,也就是说启动之后不再停止,所以如果操作不当,会被服务器发觉。
这是可以使用代理服务器帮助我们进行访问。

IP代理既代理服务器,其功能主要就是代理网络用户去获取网络信息,形象的说就是网络信息的中转站 为什么爬虫需要使用代理?

  • 让目标服务器以为不是同一个客户端在请求,放置因为ip发送请求过多而被反爬
  • 防止我们的真实地址被泄露,防止被追究

代理分类

使用免费代理网站,比如http://www.ip3366.net/ 找到代理ip和端口 下面是使用代理的示例代码:

使用代理访问baidu

import requests

header={
"User-Agent":"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.133 Safari/534.16",
}

#请求地址
url = 'https://www.baidu.com'

#代理池
proxies = {
    'http':'http://27.205.47.253:9000',
    'https':'http://59.33.52.91:9999'
}

#添加参数代理池
resp = requests.get(url,headers=header,proxies=proxies)

print(resp.status_code)

如果不好使的话,可以通过爬虫到免费代理的网站进行爬取使用。

稍后回编写爬取代理网站的ip地址的代码

相关文章

网友评论

      本文标题:2020-07-14--requests--cookie和ses

      本文链接:https://www.haomeiwen.com/subject/lnnqhktx.html