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地址的代码
网友评论