教务系统爬虫 采坑指南

说明

  • 需求:后端爬虫,实现爬取图片返回前端,前端填完表之后后端爬取相应信息。
  • redis, flask:redis存cookies,flask做后端
  • requests:没什么特别复杂的,关键的是弄清楚常用库函数的使用,抓包分析的时候搞清楚网站的认证逻辑
  • 请求网址:陕师大研究生网(内网才能访问)

三步采坑指南

Step1 抓包分析得到COOKIE

最关键的一点就在这,分析 什么时候设置的cookie
教务系统爬虫 采坑指南_第1张图片
第一次请求的时候,并没有设置cookie,cookie是在请求验证码图片的时候才设置的
教务系统爬虫 采坑指南_第2张图片

Step2 分析POST认证过程

教务系统爬虫 采坑指南_第3张图片
form data带着隐藏的CSRF_TOKEN,所以应该在网页中去找哪里存了这三个值,一般是直接存在网页里hidden了的input里,我直接使用xpath进行提取:

CSRF_XPATH_1 = '//*[@id="__EVENTVALIDATION"]/@value'
CSRF_XPATH_2 = '//*[@id="__VIEWSTATEGENERATOR"]/@value'
CSRF_XPATH_3 = '//*[@id="__VIEWSTATE"]/@value'
orgin_tree = etree.HTML(html.content)
__EVENTVALIDATION = orgin_tree.xpath(CSRF_XPATH_1)
__VIEWSTATEGENERATOR = orgin_tree.xpath(CSRF_XPATH_2)
__VIEWSTATE = orgin_tree.xpath(CSRF_XPATH_3)

之后连同cookie一并存入redis,等待下一次同一用户使用

Step3 构造认证请求

拿出redis存着的CSRF_TOKEN,加上需要填入的账号密码验证码之类的参数,我这里用了一个python3.5以后才有的解包的语法。

new_info = {**cookie_dict, **info}

照着浏览器的header伪造一个header(其实这个网站并没有做这么严格的反爬)
教务系统爬虫 采坑指南_第4张图片

header = {
        'Host': 'yjssys.snnu.edu.cn',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0',
        'Accept': '*/*',
        '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',
        'Accept-Encoding': 'gzip, deflate',
        'Referer': 'http://yjssys.snnu.edu.cn/',
        'X-Requested-With': 'XMLHttpRequest',
        'X-MicrosoftAjax': 'Delta=true',
        'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8',
        'Connection': 'keep-alive',
        'Pragma': 'no-cache',
        'Content-Length': '888'
    }

之后带着这些参数和cookies去认证,关于是否需要把form内容编码,即是否需要使用urlencode,可以参考这篇文章。
最后,认证成功之后带着cookie再去爬取获取个人信息的网址就好啦~~
希望大家不要像我一样被困扰一天才搞完!!!!
具体代码可以参考我的github,要稍微懂点redis和flask的话可以直接拿来用了~,不懂就看这里的关键代码。

你可能感兴趣的:(爬虫)