zoukankan      html  css  js  c++  java
  • Python爬虫实战三之实现山东大学无线网络掉线自动重连

    综述

    最近山大软件园校区QLSC_STU无线网掉线掉的厉害,连上之后平均十分钟左右掉线一次,很是让人心烦,还能不能愉快地上自习了?能忍吗?反正我是不能忍了,嗯,自己动手,丰衣足食!写个程序解决掉它!

    假若你不能连这个无线,那就照照思路啦~

    决战前夕

    首先我们看一下那个验证页面是咋样滴,上个图先

    20150920192557

    嘿,这界面还算可以把,需要我们输入的东西就是俩,一个就是学号,另一个是身份证号后六位,然后就可以登录,享受免费的无线网啦。

    不过不知道谁设置了个登录时长,一段时间后就会掉线了,于是,自动模拟登陆系统就要应运而生啦。

    来,我们先点击一下连接,看一下浏览器怎么工作的。

    按下F12,监听网络,我们点击第一个响应,也就是login.jsp,看一下。20150920192957我们具体看一下headers,里面form提交了什么东西,真的是茫茫多的数据啊。20150920193146嗯,一目了然POST的数据和提交的地址。 让我们来分析几个数据吧:

    ClientIP:当前客户端的IP地址,在山大软件园校区这个地址是211.87开头的

    timeoutvalue:连接等待时间,也就是俗话说的timeout

    StartTime:登录时间,也就是在你登录的那一刻的时间戳,这个时间戳是13位的,精确到了毫秒,不过一般是10位的,我们加3个0就好了

    shkOvertime:登录持续时间,这个数据默认是720,也就是12分钟之后,登录就失效了,自动掉线,我们可以手动更改

    username:学号

    password:密码,也就是我们身份证号后六位

    我们需要在登录的时候把form表单中的所有信息都POST一下,然后就可以完成登录啦。 万事俱备,只欠东风,来来来,程序写起来!

    一触即发

    说走咱就走啊,天上的星星参北斗啊!

    登陆地址:Request URL:http://192.168.8.10/portal/login.jsp?Flag=0

    首先,我们需要验证一下IP地址,先写一个获取IP地址的函数,首先判断当前IP是不是211.87开头的,如果是的话,证明连接的IP是有效的。 首先我们写一个获取本机IP的方法:

    这个方法利用了gethostbyname和gethostbyname_ex方法,获取了各个网卡的IP地址,遍历一下,找到那个211.87开头的IP,返回 接下来,获取到IP之后,我们便可以构建form,然后进行模拟登陆了。

    比较多的内容就在于form表单的数据内容以及请求头,后来利用urllib2的urlopen方法实现模拟登陆。

    如果大家对此不熟悉,可以参见

    Urllib的基本使用

    这样,登录后的结果就会保存在result变量中,我们只需要从result中提取出我们需要的数据就可以了。

    乘胜追击

    接下来,我们就分析一下数据啦,结果有这么几种:

    1.登录成功 2.已经登录 3.用户不存在 4.密码错误 5.未知错误

    好,利用result分析一下结果

    通过字符串匹配和正则表达式,我们分辨并提取出了上述五种情况。

    增加循环检测 既然是检测网络是否断开,那么我们只需要每隔一段时间检测一下就好了,那就10秒吧。

    因为这个10秒是可配置的,为了方便配置,统一配置到__init__方法里面。

    然后,我们写一个循环来检测一下

    其中我们用到了canConnect方法,这个就是检测网络是否已经断开的方法,我们可以利用ping百度的方法来检测一下。

    方法实现如下

    好啦,所有的要点我们已经逐一击破,等着凯旋吧

    收拾战场

    好了,所有的代码要点已经被我们攻破了,接下来就整理一下,让他们组合起来,变成一个应用程序吧。

    来,我们来运行一下,看下效果吧! 执行

    当前是可以联网的,我分别在网页上操作执行了断开,操作,程序自动检测到掉线,自动重新连接。

    接下来我直接断开了QLSC_STU网络的链接,程序同样检测到QLSC_STU这个热点没有连接上,提示用户链接。

    接下来我重新连接上了这个热点,由于刚才已经登录上线,且持续时间较短,网络自动恢复正常。

    下面是运行结果:

    20150920205618

    嗯,这样我们就是实现了自动掉线的检测和模拟登录。

    凯旋而归

    咿呀伊尔哟,想约妹子上自习吗?那就赶紧来试试吧!一网在手,天下我有!追男神女神都不再是梦想!

    如果有问题,欢迎留言讨论,代码肯定有不完善的地方,仅供参考。

    转载:静觅 » Python爬虫实战三之实现山东大学无线网络掉线自动重连

  • 相关阅读:
    python数据分析之ipython
    Django之文件下载
    mongodb学习之:主从复制
    Django之高级视图与URL
    Django之request对象
    tornado安全应用之用户认证
    tornado安全应用之cookie
    tornado之异步web服务二
    【原创】Linux基础之测试域名IP端口连通性
    【原创】大数据基础之Mesos+Marathon+Docker部署nginx
  • 原文地址:https://www.cnblogs.com/BigFishFly/p/6379988.html
Copyright © 2011-2022 走看看