首先我们看看爬虫的定义:
网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本。
也就是说,从网络上抓取数据的程序都可以称为是爬虫。一般来说,爬虫一般使用Python等脚本语言来编写,Java等高级语言不是说不能写,只是不适合,脚本语言本身语法简单,自带功能强大的库,编写爬虫这种小程序简单快捷。所以一般我们选用Python来写爬虫。
以上我们简单了解了爬虫的定义和使用的语言工具。接下来,我们开始用一个实际的例子来熟悉爬虫的实现。
华工的教务系统在选课的时候是最繁忙,也是经常崩溃的。原因就在于在一时间大量用户登录,服务器内存不足,无法处理这么多的请求。如果你厌倦了不停的点击刷新,提交的话,那么可以考虑用爬虫帮你自动选课。
既然有了这个念头,那么从哪里着手呢?直接写代码吗?肯定不是。要开发软件的时候直接上来就写代码的行为就是耍流氓。
第一步应该是分析选课的流程
– 登录教务系统
– 点击校公选课
– 查看所有的课程列表
– 选中要选的课程
– 提交
以上是选课的五个步骤。我们先来看看这五个步骤背后的技术实现。
在登录的时候,浏览器会发送一个post请求,附上账户密码,服务器验证通过之后,返回相应的页面。
这里有个地方要注意,就是我们如何保持登陆状态?一般来说,保持登陆状态,采取的方法无非是cookie和session。观察请求,我发现浏览器本地并没有存储cookie,(本质上session也要利用到cookie)这就产生一个问题了,没有cookie,服务器是如何保持登录状态的呢?难道它用一种新的技术。这时候就考验我们的信息检索能力了。首先我发现服务器用的是asp,那么我就去搜索关于asp保持登录状态的资料,结果发现原来asp有一种保存cookie的方法,把cookie字段放在url中,所以我们可以发现我们访问的网址中会有一串奇怪的字符串。
第二个要注意的,提交选课的表单中,它是如何标识我们选了哪一门的。观察网页的源码,最后我发现课程都有一个唯一的课程代码。当你选中一门课的时候,浏览器会把相应的课程代码添加到表单中。当你点击提交的时候,浏览器就把表单post给服务器。这样就完成了选课。选不选上这门要看数据库中这么课还有没有余量。即使课程余量为0,只要有人退选,那么你还是可以选上。这也是我们为什么能刷课的原因。用爬虫24小时不停的post选课表单,代替我们的手工劳动,解放双手,这也是技术让生活变得更好的例子。
第二步根据以上分析开始实现设计
– 登录教务系统,我们可以通过发送对应的表单给服务器,登录成功之后,我们用带有cookie的网址请求数据就可以保持登录状态,就像我们在用浏览器一样。
– 访问到课程列表之后,我们要考虑一下,怎么获取课程代码。答案是正则表达式。通过正则表达式,我们可以用一定规则从一堆代码里面获取需要的字段。
– 最后一步就把选课表单post到服务器就行。但事情没有那么简单。由于服务器使用的是window,它接受的字符集是gbk,但是Python解析字符集默认是ascii.这就涉及到字符集的转化问题。我的做法改变Python的默认编码为utf8,接受的数据转化为utf8编码,在程序中处理之后,在发送时,把表单数据转化为gbk编码,再发送出去。
第三步根据设计开发编码
这一步主要就是要耐心细心的编写并调试。
最后,总结一下,在互联网时代,网络已经融入了我们的生活,学会编写爬虫,可以提高我们的工作效率,把重复繁琐的工作交给爬虫去做。刷课只是一个简单应用,大的应用是搜索引擎,谷歌的爬虫应该是世界上最复杂最强大的了。以后如果做数据挖掘,那么爬虫也是必需的工具。
神龙|纯净稳定代理IP免费测试>>>>>>>>天启|企业级代理IP免费测试>>>>>>>>IPIPGO|全球住宅代理IP免费测试