美文网首页
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