python 爬取毕业设计系统

前言:前段时间看了些 python 爬虫的一些知识,主要参考了http://blog.csdn.net/column/details/why-bug.html 上系列 python 爬虫教程,看了几篇教程后准备实战一下,然后联想到我们学校毕业设计系统登陆初始密码和帐号都是学号,所以准备写个爬虫登陆未改过密码的帐号,然后从中爬取个人的手机号码和电子邮箱,花了两天时间爬到了 1564 位同学的个人信息。

毕业设计系统

首先应该了解清楚毕业设计系统登陆的流程,POST 了什么,GET 了什么。利用 Firefox 的 Httpfox 插件可以清楚的看到登陆过程的收发情况: ./spider1.png

毕业设计系统的网址是http://202.119.81.120/bysj/index.aspx ,登陆后调转到http://202.119.81.120/bysj/Main/Main.aspx?sid=47E4E6355EE03866&screen=B8AFA0B7A3FD09DE 其中sid值每个帐号都不同,这个网站的加载过程其实是这样的:

  1. 首先加载http://202.119.81.120/bysj/Main/Main.aspx?sid=47E4E6355EE03866&screen=B8AFA0B7A3FD09DE ,其实只是左边一个主 frame,先称之为main

  2. 然后加载http://202.119.81.120/bysj/WebFrame/Head.aspx?sid=47E4E6355EE03866&screen=B8AFA0B7A3FD09DE ,这是位于头部的一个frame,先称之为head

  3. 最后加载http://202.119.81.120/bysj/Default.aspx?sid=47E4E6355EE03866&screen=B8AFA0B7A3FD09DE ,先称之为body

爬虫的编写

获取步骤

首先先总结一下获得所需要的信息大致步骤:

  1. http://202.119.81.120/bysj/index.aspx 提交表单,从服务器返回的html代码中获取sid值

  2. GET http://202.119.81.120/bysj/WebFrame/Head.aspx?sid=47E4E6355EE03866&screen=B8AFA0B7A3FD09DE 从中获取姓名

  3. GET http://202.119.81.120/bysj/Student/xgxx.aspx?sid=47E4E6355EE03866&screen=B8AFA0B7A3FD09DE 从中获取手机号和邮箱

代码编写

只要弄清楚具体步骤,代码的编写什么简单,需要注意的问题有一下几点:

  1. 登陆提交的表单要参考Httpfox插件捕获到表单内容,有些值不给出会导致登陆失败

  2. 获取 head 和 body 这两个网站时所提交的 header 需要包含 Referer,指向http://202.119.81.120/bysj/Main/Main.aspx?sid=47E4E6355EE03866&screen=B8AFA0B7A3FD09DE