用nodejs爬取学校教务在线的课表
首先要分析爬虫的本质,模拟登陆+获取网页信息
如何模拟登陆(手动登陆)。
大致讲下思路。
- 首先是找到登陆入口,从登陆入口发起登陆请求。
- 因为我们学校的登陆是需要验证码验证,所以我先将验证码获取到,也就是获取网页信息,处理后通过fs保存到本地,本地再渲染到前端,用户输入。
- 用输入的用户信息和验证码向本地后端发起post请求,用本地后端服务器向教务在线发起post请求。(为什么需要本地后端来做媒介,因为需要处理返回的字符串数据,并且需要保存)
- post请求完成后根据教务返回的成功数据继续请求下一个url,也就是查看成绩的url,需要再控制台的network查看发起的各种请求,分析出到底是哪个请求url发起的查看成绩请求。
- 获取到成绩页面的数据后直接返回本地服务器,本地处理返回的网页格式。转成需要的格式后再存入数据库。
如果是自动登陆,则需要自动识别模块,nodejs有一个自动识别验证码的模块tesseract模块,但是准确率有限,所以需要不停的发起申请并验证。
值得注意的是,请求时的请求头信息尽量完整,不可缺少的有url,cookie等。
cookie一定是上一次请求返回的response里面的setcookie,用这个cookie去请求,所以如果需要继续请求,一定要保存上一个请求的响应cookie
具体代码不贴了。
等我项目完成度一定高以后,将项目放到GitHub上,有问题留言或联系qq178977641。