zoukankan      html  css  js  c++  java
  • 爬虫日记-模拟登录cookie操作

    模拟登录cookie操作

    我们之前已经实现了模拟人人网登录,那么我们接下来是不是可以直接用requests模块获取登录成功的界面的内容?

    于是我们就那这个url做了请求。

    结果访问到的html依然是登录界面。

    这就是http/https协议的特性:无状态

    没有请求到对应页面数据的原因:

    ​ 发起的第二次基于个人主页页面请求的时候,服务器端并不知道该次请求是基于登录状态下的请求。

    这个时候就要用到cookie来解决

    cookie:用来让服务器端记录客户端的相关状态

    ​ —手动处理:通过抓包工具获取cookie值,将该值封装到headers中。(不建议)

    ​ —自动处理:

    ​ —cookie值的来源是在哪里?

    ​ —模拟登陆post请求之后,由服务器端创建的。

    ​ —session会话对象:

    ​ —作用:

    ​ 1.可以进行请求的发送。

    ​ 2.如果请求过程中产生了cookue,则该cookie会被自动存储/携带在该 session对象中。

    ​ —创建一个session对象:session=requests.Session()

    ​ —使用session对象进行模拟登陆post请求的发送(cookue就会被存储在session 中)

    ​ —session对象对个人主页对应的get请求进行发送(携带了cookie)

    from code import YDMHttp
    import requests
    from lxml import etree
    
    
    
    def shibie(imagefile,codetype):
        username = 'chanyuli'
    
        # 密码
        password = 'qw171222338'
    
        # 软件ID,开发者分成必要参数。登录开发者后台【我的软件】获得!
        appid = 8956
    
        # 软件密钥,开发者分成必要参数。登录开发者后台【我的软件】获得!
        appkey = '3e05b8c8571c3cc219160a3f449501db'
    
        # 图片文件
        filename = imagefile
    
        # 验证码类型,# 例:1004表示4位字母数字,不同类型收费不同。请准确填写,否则影响识别率。在此查询所有类型 http://www.yundama.com/price.html
        codetype = codetype
    
        # 超时时间,秒
        timeout = 15
    
        # 检查
        if (username == 'username'):
            print('请设置好相关参数再测试')
        else:
            # 初始化
            yundama = YDMHttp(username, password, appid, appkey)
    
            # 登陆云打码
            uid = yundama.login();
            print('uid: %s' % uid)
    
            # 查询余额
            balance = yundama.balance();
            print('balance: %s' % balance)
    
            # 开始识别,图片路径,验证码类型ID,超时时间(秒),识别结果
            cid, result = yundama.decode(filename, codetype, timeout);
            print('cid: %s, result: %s' % (cid, result))
    
    
    url='http://www.renren.com/SysHome.do'
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3730.400 QQBrowser/10.5.3805.400'}
    
    page_text=requests.get(url=url,headers=headers).text
    tree=etree.HTML(page_text)
    image_url=tree.xpath('//*[@id="verifyPic_login"]/@src')[0]
    image_data=requests.get(url=image_url,headers=headers).content
    with open('./img.jpg','wb')as fw:
        fw.write(image_data)
    result=shibie('img.jpg',1006)
    data={
        'email': '18857221709',
        'icode': result,
        'origURL': 'http://www.renren.com/home',
        'domain':'renren.com',
        'key_id': '1',
        'captcha_type': 'web_login',
        'password': '1407ce10892be5fe40975b80ef78021c29515c1d4ade6cd08fe3e9de1823fed3',
        'rkey': 'c4c7ae1e97d7872d7ca29c01cff4eae5',
        'f': ''
    }
    session=requests.Session()
    login_url='http://www.renren.com/ajaxLogin/login?1=1&uniqueTimestamp=2019832253436'
    page1_text=session.post(url=login_url,headers=headers,data=data).text
    
    with open('./renren.html','wt',encoding='utf8')as fw:
        fw.write(page1_text)
    
    login_success_url='http://www.renren.com/972281199'
    page_success_text=session.get(url=login_success_url,headers=headers).text
    
    with open('./page.html','wt')as fw:
        fw.write(page_success_text)
    
  • 相关阅读:
    C语言经典算法100例(二)
    Plus One @LeetCode
    hdu 4099 Revenge of Fibonacci 字典树+大数
    算法入门系列一--DP初步
    《当裸辞的程序猿遇上最冷季八》——第一次约女孩吃饭
    UVa 297
    手机NFC通信的安全车钥匙
    innosetup卸载软件后,删除定时任务schedule task
    VS2008调试程序时出现"XXX mutex not created."
    centOS7关闭防火墙的命令
  • 原文地址:https://www.cnblogs.com/chanyuli/p/11568329.html
Copyright © 2011-2022 走看看