前言:前段时间看了些 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值每个帐号都不同,这个网站的加载过程其实是这样的:
首先加载http://202.119.81.120/bysj/Main/Main.aspx?sid=47E4E6355EE03866&screen=B8AFA0B7A3FD09DE ,其实只是左边一个主 frame,先称之为main
然后加载http://202.119.81.120/bysj/WebFrame/Head.aspx?sid=47E4E6355EE03866&screen=B8AFA0B7A3FD09DE ,这是位于头部的一个frame,先称之为head
最后加载http://202.119.81.120/bysj/Default.aspx?sid=47E4E6355EE03866&screen=B8AFA0B7A3FD09DE ,先称之为body
爬虫的编写
获取步骤
首先先总结一下获得所需要的信息大致步骤:
向http://202.119.81.120/bysj/index.aspx 提交表单,从服务器返回的html代码中获取sid值
GET http://202.119.81.120/bysj/WebFrame/Head.aspx?sid=47E4E6355EE03866&screen=B8AFA0B7A3FD09DE 从中获取姓名
GET http://202.119.81.120/bysj/Student/xgxx.aspx?sid=47E4E6355EE03866&screen=B8AFA0B7A3FD09DE 从中获取手机号和邮箱
代码编写
只要弄清楚具体步骤,代码的编写什么简单,需要注意的问题有一下几点:
登陆提交的表单要参考Httpfox插件捕获到表单内容,有些值不给出会导致登陆失败
获取 head 和 body 这两个网站时所提交的 header 需要包含 Referer,指向http://202.119.81.120/bysj/Main/Main.aspx?sid=47E4E6355EE03866&screen=B8AFA0B7A3FD09DE