Golang实现正方教务系统爬虫(二)
2017-10-28 18:47
1486 查看
上次我们已经登录进了首页,明白了爬虫的原理,这次我们看一下web界面是如何实现的.
项目地址 https://github.com/Nickqiaoo/go-webcrawler
程序目前的功能很简单一共四个函数.Welcone处理登录请求,Querycredit处理学分查询,Querygrade处理成绩查询.func main() { http.HandleFunc("/credit", controller.Querycredit) http.HandleFunc("/login/", controller.Welcome) http.HandleFunc("/static/", controller.Welcome) http.HandleFunc("/grade", controller.Querygrade) err := http.ListenAndServe(":9090", nil) if err != (nil) { log.Fatal("ListenAndServe:", err) } }
Welcome函数中判断请求方式,GET请求则返回login界面,POST请求处理登录返回welcome界面.
welcome界面做了一些处理,第一为了两个按钮提交到不同的处理函数,这里提交是用js实现的,第二这里用了两个hidden标签记录姓名和学号,直接POST给查询函数,因为后面查询的URL需要用这两个参数进行拼接,这样服务端无需对用户信息作保存.
这里重点说一下cookie策略
对每一个用户,我们要保证他每次提交到教务系统的cookie都一样,我一开始的思路是向获取教务系统的cookie,再生成用户cookie将两个cookie关联,后来发现其实可以直接将教务系统的cookie直接给用户作为用户cookie,这样服务端什么都不用存.req, err := c.Get(Url2) cook := c.Jar.Cookies(u) cookie := http.Cookie{Name: cook[0].Name, Value: cook[0].Value, Path: "/", MaxAge: 800} http.SetCookie(w, &cookie)
之后的查询就和之前一样了,拼接查询的url地址,POST请求.这里我们如何从返回的html里提取我们需要的信息呢?一种思路是正则,我觉得太麻烦.这里我们用一个goquery库
doc := decoder.NewReader(response.Body) result, _ := goquery.NewDocumentFromReader(doc) view, _ := result.Find("#__VIEWSTATE").Attr("value") event, _ := result.Find("#__EVENTVALIDATION").Attr("value")
直接获取DOM节点的值,很方便.
相关文章推荐
- Golang实现正方教务系统爬虫(一)
- python爬虫——正方教务系统成绩查询
- python爬虫实战之模拟正方教务系统登录查询成绩
- Java实现从正方教务系统抓取数据(一)--模拟登录
- 一个爬进正方教务系统的爬虫的诞生
- 正方教务系统课表成绩抓取核心代码解析,你也能实现超级课程表的功能
- python爬虫正方教务系统
- 用php实现正方教务系统的模拟登陆
- Java实现从正方教务系统抓取数据(三)--Android客户端
- [置顶] 爬虫实践---正方教务系统爬取历年成绩
- python爬虫正方教务系统
- 正方教务系统网络爬虫 安全破解
- Java实现从正方教务系统抓取数据(二)--验证码识别
- 网络爬虫-正方教务系统登录
- python爬虫实战之模拟正方教务系统登录查询成绩
- java无需获取cookie实现模拟登陆正方教务系统获取课表等数据
- python爬虫登录正方教务管理系统获取成绩数据
- 基于java的URP教务系统爬虫实现
- python 爬虫登陆学校教务系统之验证码识别