• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

爬虫 模拟登录 post请求 cookie session

武飞扬头像
weixin_65922074
帮助1

模拟登录两种方式

1.利用登录之后的cookie(登录信息)  访问时带上cookie参数

携带cookie的方法

(1)最直接的,在headers参数里面添加cookie,然后在get请求时带上headers参数

  1.  
    headers_user = {
  2.  
    "User-Agent":"........"
  3.  
    "Cookie":"......."
  4.  
    }
  5.  
    response_user = requests.get(url,headers=headers_user)

(2)单独构造一个字典,用于存放cookie参数 (requests的get请求支持传入cookies参数)

  1.  
    cookies_user = {"cookie" = "............."}
  2.  
    response_user = requests.get(url,headers=...,params=...,cookies=cookies_user}
  3.  
     
  4.  
    # 字典中作为键的是单数cookie
  5.  
    # 传参时定义参数的是cookies=。。。 是复数

如果是高版本python的话(3.8以上):

需要把字符串格式的cookie 转化成字典格式的键值对

  1.  
    cookies_str = "........." # 从浏览器里得到的字符串形式的cookie
  2.  
    cookies_dict = {i.split("=",1)[0]: i.split("=",1)[1] for i in cookies_str.split("; "))
  3.  
    response_user = requests.get(url, headers = ..., cookies = cookies_dict }
  4.  
     
  5.  
    # 字典推导式 for 后面的这个split 分割是以“; ”(分号 空格) 否则还需要用去空格的函数再转化一次
  6.  
    # for i in cookies_str.split("; ") 得到的是分割后的字符串,以XXXXXX=..........形式存在
  7.  
    # 再以“=”分割一次,前面XXXX对应的就是字典的键key,后面的.......里面可能还有更多的“=”符号,
  8.  
    # 所以只分割一次,将.......整体作为字典的值value

2. 利用post请求完成模拟登录,得到登录后的页面

1.post请求的url 跟get请求时 是不一样的  

登录界面,输入错误的用户名或者密码,然后开始抓包

点击登录,在network里面 的 headers里面  一个看到一个post请求的URL

2.模拟登录   需要 用户名 密码(这是最基本的 ,有可能还需要更多)

在浏览器 network-headers右边  有个Payload  这里可以看到form data

form data右边有个view URL_encoded  这里有标准的键值对参数(对应修改正确的用户名和密码,其他登录错误和正确都不变的键值对直接复制过来就行)

按照form data的格式 建立一个字典(比如字典名为form_data)

        字典的key和value都要加双引号

requests.post(url,headers=....,data=form_data)

        通过post函数的data参数传参

存在不足:

通过登录后的cookie发送get请求:cookie有有效期,过期就不能用了 

post请求模拟登录,如果要访问登陆后的多个页面,那么需要每次都post请求,一是比较麻烦,二是频繁登录容易被判定为非正常的用户行为从而被封禁账号

解决办法:

利用post请求发送

得到登录后的cookie

将这个得到的新的cookie作为参数再去发送get请求不同的url

这样只发送一次post请求相当于登录一次,登录之后一直使用get请求

  1.  
    url_login = "登录网址"
  2.  
    form_data = {.........}
  3.  
     
  4.  
    session_user = requests.session()
  5.  
     
  6.  
    session_user.post(url_login,headers=......,data=form_data)
  7.  
    # 这里可以不用定义变量来接收对象,因为目的只是为了让session_user这个对象携带登录后的cookie就行了
  8.  
     
  9.  
    url_user = "登录之后需要访问的页面"
  10.  
     
  11.  
    response_user = session_user.get(url_user,headers=.....)
  12.  
    # session_user 调用过post请求函数后就已经自带了登录后的cookie
  13.  
    # 此时再调用session_user对象的get请求,就能得到登录后需要访问的页面
  14.  
     
  15.  
    str_data = response_user.content.decode("utf-8")
  16.  
     
  17.  
     
  18.  
     
学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhhacchi
系列文章
更多 icon
同类精品
更多 icon
继续加载