一、模拟登陆需要账号,密码的网址

一些不需要登陆的网址操作已经试过了,这次来用Python尝试需要登陆的网址,来利用cookie模拟登陆

由于我们教务系统有验证码偏困难一点,故挑了个软柿子捏,赛氪,赛氪-大学生竞赛活动社区我用的是火狐浏览器自带的F12开发者工具,打开网址输入账号,密码,登陆,如图

可以看到捕捉到很多post和get请求,第一个post请求就是我们提交账号和密码的

点击post请求的参数选项可以看到我们提交的参数在bian表单数据里,name为账户名,pass为加密后的密码,remember为是否记住密码,0为不记住密码。

我们再来看看headers,即消息头

我们把这些请求头加到post请求的headers后对网页进行模拟登陆,

Cookie为必填项,否则会报错:

{"code":403,"message":"访问超时,请重试,多次出现此提示请联系QQ:1409765583","data":[]}

便可以创建一个带有cookie的opener,在第一次访问登录的URL时,将登录后的cookie保存下来,然后利用带有这个cookie的opener来访问该网址的其他版块,查看登录之后才能看到的信息。

代码如下:

import urllib

from urllib import request

from http import cookiejar

login_url = "https://www.saikr.com/login"

postdata ={

"name": "your account","pass": "your password(加密后)"

}

header = {

"Accept":"application/json, text/javascript, */*; q=0.01",

"Accept-Language":"zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2",

"Connection":"keep-alive",

"Host":"www.saikr.com",

"Referer":"https://www.saikr.com/login",

"Cookie":"your cookie",

"Content-Type":"application/x-www-form-urlencoded; charset=UTF-8",

"TE":"Trailers","X-Requested-With":"XMLHttpRequest"

}

postdata = urllib.parse.urlencode(postdata).encode('utf8')

#req = requests.post(url,postdata,header)

#声明一个CookieJar对象实例来保存cookie

cookie = cookiejar.CookieJar()

#利用urllib.request库的HTTPCookieProcessor对象来创建cookie处理器,也就CookieHandler

cookie_support = request.HTTPCookieProcessor(cookie)

#通过CookieHandler创建opener

opener = request.build_opener(cookie_support)

#创建Request对象

my_url="https://www.saikr.com/u/5598522"

req1 = request.Request(url=login_url, data=postdata, headers=header)#post请求

req2 = request.Request(url=my_url)#利用构造的opener不需要cookie即可登陆,get请求

response1 = opener.open(req1)

response2 = opener.open(req2)

print(response1.read().decode('utf8'))

print(response2.read().decode('utf8'))

到此就告一段落了:

ps:有点小插曲,当在headers里加入

最后在 print(response1.read().decode('utf8'))时便会报错

UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte

原因:在请求header中设置了'Accept-Encoding': 'gzip, deflate'

解决方法:去掉Accept-Encoding后就正常了

二、模拟登陆网址常用方法总结

1.通过urllib库的request库的函数进行请求

from urllib import request

#get请求

------------------------------------------------------

#不加headers

response=request.urlopen(url)

page_source = response.read().decode('utf-8')

#加headers,由于urllib.request.urlopen() 函数不接受headers参数,所以需要构建一个urllib.request.Request对象来实现请求头的设置

req= request.Request(url=url,headers=headers)

response=request.urlopen(req)

page_source = response.read().decode('utf-8')

#post请求

-------------------------------------------------------

postdata = urllib.parse.urlencode(data).encode('utf-8')#必须进行重编码

req= request.Request(url=url,data=postdata,headers=headers)

response=request.urlopen(req)

page_source = response.read().decode('utf-8')

#使用cookie访问其他版块

#声明一个CookieJar对象实例来保存cookie

cookie = cookiejar.CookieJar()

#利用urllib.request库的HTTPCookieProcessor对象来创建cookie处理器,也就CookieHandler

cookie_support = request.HTTPCookieProcessor(cookie)

#通过CookieHandler创建opener

opener = request.build_opener(cookie_support)

# 将Opener安装位全局,覆盖urlopen函数,也可以临时使用opener.open()函数

#urllib.request.install_opener(opener)

#创建Request对象

my_url="https://www.saikr.com/u/5598522"

req2 = request.Request(url=my_url)

response1 = opener.open(req1)

response2 = opener.open(req2)

#或者直接response2=opener.open(my_url)

print(response1.read().decode('utf8'))

print(response2.read().decode('utf8'))

2.通过requests库的get和post函数

import requests

import urllib

import json

#get请求

-----------------------------------------------------------

#method1

url="https://www.saikr.com/"

params={ 'key1': 'value1','key2': 'value2' }

real_url = base_url + urllib.parse.urlencode(params)

#real_url="https://www.saikr.com/key1=value1&key2=value2"

response=requests.get(real_url)

#method2

response=requests.get(url,params)

print(response.text)#

print(response.content)#

#post请求

login_url = "https://www.saikr.com/login"

postdata ={

"name": "1324802616@qq.com","pass": "my password",

}

header = {

"Accept":"application/json, text/javascript, */*; q=0.01",

"Accept-Language":"zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2",

"Connection":"keep-alive",

"Host":"www.saikr.com",

"Referer":"https://www.saikr.com/login",

"Cookie":"mycookie",

"Content-Type":"application/x-www-form-urlencoded; charset=UTF-8",

"TE":"Trailers","X-Requested-With":"XMLHttpRequest"

}

#requests中的post中传入的data可以不进行重编码

#login_postdata = urllib.parse.urlencode(postdata).encode('utf8')

response=requests.post(url=login_url,data=postdata,headers=header)#

#以下三种都可以解析结果

json1 = response1.json()#

json2= json.loads(response1.text)#

json_str = response2.content.decode('utf-8')#

#利用session维持会话访问其他版块

--------------------------------------------------------------------

login_url = "https://www.saikr.com/login"

postdata ={

"name": "1324802616@qq.com","pass": "my password",

}

header = {

"Accept":"application/json, text/javascript, */*; q=0.01",

"Connection":"keep-alive",

"Referer":"https://www.saikr.com/login",

"Cookie":"mycookie",

}

session = requests.session()

response = session.post(url=url, data=data, headers=headers)

my_url="https://www.saikr.com/u/5598522"

response1 = session.get(url=my_url, headers=headers)

print(response1.json())

欢迎关注我的小博客:https://blog.csdn.net/qq_38412868​blog.csdn.net

python post 登录_Python爬虫之模拟post登陆及get登陆相关推荐

  1. python 12306登录_python爬虫--模拟12306登录

    模拟12306登录 超级鹰: #!/usr/bin/env python # coding:utf-8 import requests from hashlib import md5 class Ch ...

  2. python爬虫淘宝登录_python爬虫实现模拟淘宝登录

    就算所有人都不支持你.这条路会很曲折,你也会一度认为是不是自己选错了,但只要坚持,就算最后没有成功,但努力了就不会有遗憾. python爬虫模拟淘宝登录 小贴士 这个爬虫和搜索引擎的爬虫是有区别的.搜 ...

  3. python爬虫怎么登录_Python爬虫基础-模拟登陆

    为什么我们要让爬虫模拟登陆呢?有些内容只有登陆才能进行爬取,如知乎,不登录的主页只能看到注册和登陆 : 你想爬取自己的个人信息 有什么方法呢?cookie 在互联网发展的早期,由于大家的服务器都不是太 ...

  4. python模拟登录网站_Python爬虫之模拟登录wechat

    不知何时,微信已经成为我们不可缺少的一部分了,我们的社交圈.关注的新闻或是公众号.还有个人信息或是隐私都被绑定在了一起.既然它这么重要,如果我们可以利用爬虫模拟登录,是不是就意味着我们可以获取这些信息 ...

  5. python爬虫登录教程_Python爬虫之模拟知乎登录的方法教程

    前言 对于经常写爬虫的大家都知道,有些页面在登录之前是被禁止抓取的,比如知乎的话题页面就要求用户登录才能访问,而 "登录" 离不开 HTTP 中的 Cookie 技术. 登录原理 ...

  6. python多用户登录_python 多用户登录

    原博文 2017-09-07 15:18 − Python多用户登录 需求 让用户输入用户名密码 认证成功后显示欢迎信息 输错三次后退出程序 可以支持多个用户登录 (提示,通过列表存多个账户信息) 用 ...

  7. pythoncookie自动登录_Python爬虫连载6-cookie深入使用实例化实现自动登录

    一.使用cookie登录 1.直接把cookie复制下去,然后手动放到请求头 2.http模块包含一些关于cookie的模块,通过他们我们可以自动使用cookie (1)cookieJar 管理存储c ...

  8. python用户登录_python用户登录系统

    本文实例为大家分享了用户登录系统python实现代码,供大家参考,具体内容如下 注意事项: 1.使用python3执行程序.按提示输入1或2,登录或退出程序 2.输入用户名后,如果用户名被锁定及无效用 ...

  9. python爬虫模拟与思考_Python爬虫之模拟知乎登录

    昨天受邀在 CSDN 微信群做了一次 Python 技术分享,主题是<用Python模拟知乎登录>,效果非常不错,发现越来越多的人加入到了 Python 阵容中. 经常写爬虫的都知道,有些 ...

最新文章

  1. 解决错误:Re-installation failed due to different application signatures
  2. 可惜Java中没有yield return
  3. mysql注入攻击实_三十三、MySQL基础系列笔记之MySQL安全问题与SQL注入攻击
  4. MySQL5.7升级到8.0 之后,配合ubantu18.04遇到的常规问题以及非常规问题的解决方案
  5. 并且确定已经识别出了主要的HTML5技术风险
  6. iirf有时有效,有时返回404错误的解决方法
  7. 统计数组中出现次数最多的元素并输出
  8. 2016 计算机控制技术试题,计算机控制技术试题
  9. python 爬取图片网站图片链接并下载收集
  10. IPtables中SNAT、DNAT和MASQUERADE的含义 (转)
  11. Shiro的Subject对象详解
  12. 苹果 企业 开发者账号 注册、申请续费整个流程($299的账号)
  13. [数据库笔记] SQL50题11 - 30
  14. 一个文献代理和医学资料非常丰富的地方
  15. 计算机专业秃顶图片,大学被叫惨的三大专业,计算机秃顶是常事,医学专业这个就惨了!...
  16. 手机摄影-参数(光圈)
  17. 华为鸿蒙亮利剑,华为P50pro亮利剑,鸿蒙OS+徕卡五摄+5400mAh,这才是华为
  18. matlab声音信号调制-3种方法(附matlab代码)
  19. jdk版本升级、技术选型
  20. 骑鹤下江南 mysql 安装及配置

热门文章

  1. java用方法重载就圆的面积,java中重载怎么写
  2. 直播产品行业解决方案|商业化变现模型
  3. vscode调试不出现C CPP,lauch json不自动填充cppgdb选项的替代方案
  4. 单排——六级听力训练
  5. 光宇游戏软件测试面试,[腾讯][急招][缺人][光速面试] IEG 天美游戏测试开发工程师...
  6. 资产管理公司拥抱区块链
  7. 一般的在线教育平台需具备哪些功能?
  8. csrf验证问题 -- 不同域名下Iframe嵌套Cookie失效导致csrf验证失败
  9. android编辑软件下载,Android Files
  10. 网络原理考点之IP地址分配问题解题思路