前言:

第一篇,分析青果教务管理系统登陆模块,理清思路

第二篇,使用常规的python常用库 requests来实现模拟登陆

第三篇,使用scrapy来实现模拟登陆

目的在于了解模拟登陆网站的要点和方法,了解http请求的一些知识。

(1)scrapy模拟登陆

依然按照上一篇的思路,我们编写代码即可。这里我就不啰嗦了。就放下spider 的代码

# -*- coding: utf-8 -*-
from _mysql import resultimport scrapy
import re
import random
import time
from PIL import Image
from md5tools import md5_encryptclass AynueduSpider(scrapy.Spider):name = 'aynuedu'allowed_domains = ['jwglxt.aynu.edu.cn']start_urls = ['http://jwglxt.aynu.edu.cn/']VIEWSTATE = ''#处理第一次请求,提取登陆需要的额外参数def parse(self, response):#拿到cookieheaders = response.headersnewheaders = dict(headers)#设置referernewheaders['Referer'] = 'http://jwglxt.aynu.edu.cn/'yield scrapy.Request(url="http://jwglxt.aynu.edu.cn/_data/home_login.aspx",callback=self.parse_loginurl,method='GET',headers=newheaders)def parse_loginurl(self,response):"""访问登陆的网址,拿到额外的参数:param response::return:"""headers = response.headersnewheaders = dict(headers)# 设置referernewheaders['Referer'] = 'http://jwglxt.aynu.edu.cn/_data/home_login.aspx'newheaders['Accept']='image/webp,image/apng,image/*,*/*;q=0.8'#使用正则表达式获取数据self.VIEWSTATE = re.search(r'<input type="hidden" name="__VIEWSTATE" value="(.*)"', response.text).group(1)print self.VIEWSTATEurl = "http://jwglxt.aynu.edu.cn/sys/ValidateCode.aspx?t=" + str(random.randint(0, 999))yield scrapy.Request(url=url, callback=self.parse_yzmurl,method='GET', headers=newheaders)def parse_yzmurl(self,response):"""获取验证码:param response::return:"""with open("yzm.jpg","wb") as f:f.write(response.body)time.sleep(1)#打开该验证码im = Image.open('yzm.jpg')im.show()yzm = raw_input("please input yzm:")#print yzmprint self.VIEWSTATEusername = str(raw_input("please input username:"))print usernamepasswd = str(raw_input("please input passwd:"))print passwd# username = "xxx"# passwd = "xxx"# 密码加密passwd_jiami = md5_encrypt((username + md5_encrypt(passwd)[0:30].upper() + '10479'))[0:30].upper()# 验证码加密yzm_jiami = md5_encrypt((md5_encrypt(yzm.upper())[0:30].upper() + '10479'))[0:30].upper()url = 'http://jwglxt.aynu.edu.cn/_data/home_login.aspx'login_data = {'__VIEWSTATE': self.VIEWSTATE,'pcInfo': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36undefined5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36 SN:NULL','typeName': 'ѧ��','dsdsdsdsdxcxdfgfg': passwd_jiami,'fgfggfdgtyuuyyuuckjg': yzm_jiami,'Sel_Type': 'STU','txt_asmcdefsddsd': username,'txt_pewerwedsdfsdff': '','txt_sdertfgsadscxcadsads': '',}login_headers = {'Referer': 'http://jwglxt.aynu.edu.cn/_data/home_login.aspx','Origin': 'http://jwglxt.aynu.edu.cn',}# 发送请求参数,并调用指定回调函数处理#yield scrapy.Request(url=url, callback=self.parse_login,method='POST', headers=login_headers,)yield  scrapy.FormRequest(url=url,formdata=login_data,headers=login_headers,callback=self.parse_login,method="POST")def parse_login(self,response):""":param response::return:"""url = "http://jwglxt.aynu.edu.cn/xsxj/Stu_MyInfo_RPT.aspx"getinfoheaders = {'Referer': 'http://jwglxt.aynu.edu.cn/xsxj/Stu_MyInfo.aspx',}yield scrapy.Request(url=url,headers=getinfoheaders,callback=self.show_info)def show_info(self,response):print response.text

几点说明:

这里使用了 PIL  ,用来打开保存好的验证码。

这里代码并没有出现cookie,这是scrapy 已经做好的,我们只需要改变需要变化的请求头即可。

其中post 请求, 使用这样的方式。

scrapy.FormRequest(url=url,formdata=login_data,headers=login_headers,callback=self.parse_login,method="POST")

(2)总结

到这里这个例子基本完成,还有许多改进的地方,比如验证码的处理,我们在第一篇中介绍的三种方式。比如我们可以不加密账号密码的情况下登陆。等等

这个例子并不是来说明怎么登陆青果教务系统的网站,这不是重点。重点是在于青果教务系统的登陆模块,是爬虫经常遇到的登陆情况。

(1)登陆模块需要定制的请求头比如 referer ,Origin ,当然修改 user-agent 才很关键。

(2)常规的验证码,一般登陆都需要。

(3)登陆需要额外的参数,我们就可以使用正则或者xpath 将这些额外参数直接动态获取。

(4)前台对密码和验证码进行了加密处理。其实我们完全也可以直接拿正常加密后的值,直接模拟登陆,但这样就不能多个用户操作。

所以我们拿这个例子,可以作为一个整合的例子。

源码:https://github.com/gengzi/simulatelogin

码字不易,给个赞吧。

python-scrapy模拟登陆网站--登陆青果教务管理系统(三)相关推荐

  1. Scrapy框架模拟Github网站登陆

    1. 以往的模拟登陆的方法 1.1 requests模块是如何实现模拟登陆的? 直接携带cookies请求页面 找url地址,发送post请求存储cookie 1.2 selenium是如何模拟登陆的 ...

  2. Python selenium模拟淘宝登陆

    通过selenium定位到各个元素,通过相关操作(如输入框的输入,按钮的点击等)来模拟人的真实操作流程 流程是通过绕个圈子,用微博账号登陆来绕过淘宝登陆,不过事先需要将微博账号与淘宝账号进行绑定 下面 ...

  3. python简单模拟登录网站(以登录教务系统为例)

    简单参考 Python3实现网站模拟登录 写了个python模拟登录教务系统,具体用到了selenium浏览器自动测试框架,参考了 Flask 的文档 作接口.代码供参考. import time f ...

  4. scrapy mysql 模拟登录知乎_详细的Python Scrapy模拟登录知乎

    之前爬取携程和51job都是免登陆就能爬取数据的,但是今天爬取知乎的时候就需要登录后才能爬到数据,那我们只能进行模拟登录了. 知乎登录分为邮箱登录和手机登录两种方式,通过浏览器的开发者工具查看,我们通 ...

  5. java web 青科大_青科大正方教务管理系统

    青科大正方教务管理系统(一) 青科大正方教务管理系统(二) 青科大正方教务管理系统(三) 山东科技大学学生网上正方教务系统操作指南 一.登录系统 打开IE浏览器,输入WEB服务器地址(192.168. ...

  6. python模拟各大网站登陆方式,以及一些爬虫程序,麻麻再也不用担心我学爬虫啦!...

    python模拟各大网站登陆方式,以及一些爬虫程序 仅供练习使用,代码注释很详细 收集了一些各大网站登陆方式, 和一些网站的爬虫程序,有的是通过selenium登录,有的是通过抓包直接模拟登录,有的是 ...

  7. python模拟各大网站登陆方式,以及一些爬虫程序, 麻麻再也不用担心我学爬虫啦!...

    python模拟各大网站登陆方式,以及一些爬虫程序 仅供练习使用,代码注释很详细 收集了一些各大网站登陆方式, 和一些网站的爬虫程序,有的是通过selenium登录,有的是通过抓包直接模拟登录,有的是 ...

  8. # python模拟各大网站登陆方式, 包括爬虫--你们要的全都有

    python模拟各大网站登陆方式,以及一些爬虫程序 仅供练习使用,代码注释很详细 走过路过的大佬们,记得给个star支持一下,嘻嘻嘻? 收集了一些各大网站登陆方式, 和一些网站的爬虫程序,有的是通过s ...

  9. python 模拟各大网站登陆方式,以及一些爬虫程序

    仅供练习使用,代码注释很详细 收集了一些各大网站登陆方式, 和一些网站的爬虫程序,有的是通过 selenium 登录,有的是通过抓包直接模拟登录,有的是利用 scrapy,希望对小白有所帮助,本项目用 ...

  10. python爬取学校教务管理系统_python requests模拟登陆正方教务管理系统,并爬取成绩...

    最近模拟带账号登陆,查看了一些他人的博客,发现正方教务已经更新了,所以只能自己探索了. 登陆: 通过抓包,发现需要提交的值 需要值lt,这是个啥,其实他在访问登陆页面时就产生了 session=req ...

最新文章

  1. 'avpicture_fill': 被声明为已否决
  2. log4jdbc mysql jdbc_spring boot 集成log4jdbc 查看完整sql
  3. HDOJ 5373 The shortest problem 【数论】
  4. Django开发—如何重置migration
  5. 阿里云安装JDK1.7
  6. 静态属性,函数闭包,call/apply,继承
  7. 注册assembly的问题
  8. React 项目开发问题积累
  9. python用outlook自动发邮件_Python 调用outlook发送邮件(转 )
  10. web安全之SQL注入---第四章 如何进行SQL注入攻击
  11. lamp 重启mysql_lamp常用命令 --Ubuntu下启动/重启/停止apache,mysql服务器
  12. BZOJ4471 : 随机数生成器Ⅱ
  13. UiModeManager设置夜间模式和行车模式
  14. pyqt5 显示更新进度条_python3.x+pyqt5实现主窗口状态栏里(嵌入)显示进度条功能...
  15. html设置等宽字体效果
  16. cad刷新快捷键_36个CAD快捷键命令,18个CAD制图技巧,学会轻松玩转CAD
  17. FPGA--有限状态机(FSM)的设计
  18. ARCore从零到一 (3) 更换AR模型
  19. adb关闭系统自动更新
  20. 陈松松:推荐制作高清视频必备的3个工具

热门文章

  1. 1688API item_search_img - 按图搜索1688商品(拍立淘)
  2. Unity 使用video player播放360全景视频
  3. python操作redis集群是连接池么_Python如何操作redis使用连接池
  4. python做音频格式转换
  5. golang 读写 xlsx 文件
  6. matplotlib画图去掉边缘空白
  7. 人脸关键点检测 代码 matlab,从传统方法到深度学习,人脸关键点检测方法综述...
  8. 怎么把kux格式转换成mp4?完美转换优酷kux格式
  9. postman中从url中获取各参数值
  10. 程序员面试HR常问问题(含答案)