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

前言:

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

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

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

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

(1)scrapy模拟登陆

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

# -*- coding: utf-8 -*-
from _mysql import result

import scrapy
import re
import random
import time
from PIL import Image
from md5tools import md5_encrypt


class AynueduSpider(scrapy.Spider):
    name = 'aynuedu'
    allowed_domains = ['jwglxt.aynu.edu.cn']
    start_urls = ['http://jwglxt.aynu.edu.cn/']

    VIEWSTATE = ''

    #处理第一次请求,提取登陆需要的额外参数
    def parse(self, response):
        #拿到cookie
        headers = response.headers
        newheaders = dict(headers)
        #设置referer
        newheaders['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.headers
        newheaders = dict(headers)
        # 设置referer
        newheaders['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'

几点说明:

这里使用了 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)