最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 如何解决Python爬虫中的网络掉线问题?

    正文概述    2020-04-13   309

    在学校里的时候,除了上课,还有一大幸福的事情,就是用着学校的网线网络。当然玩的时候很开心,就是没事关键词时刻掉链子。时不时地网络掉线让人非常恼火,什么团战在梦游啊,看剧卡住不动了,相信能引起很多小伙伴的共鸣。所以,为了大家的快乐,小编找到了一个解决办法,分享给大家。


    以山东大学网络为例,别的话不多说,直接上程序

    __author__ = 'CQC'
    #-*- coding:utf-8 -*-
     
    import urllib
    import urllib2
    import socket
    import types
    import time
    import re
    import os
    import subprocess
     
    class Login:
     
        #初始化
        def __init__(self):
            #学号密码
            self.username = '201200131012'
            self.password = 'XXXXXX'
            #山大无线STU的IP网段
            self.ip_pre = '211.87'
            #登录时长
            self.overtime = 720
            #检测间隔时间,单位为秒
            self.every = 10
     
        #模拟登录
        def login(self):
            print self.getCurrentTime(), u"正在尝试认证QLSC_STU无线网络"
            ip = self.getIP()
            data = {
                "username": self.username,
                "password": self.password,
                "serverType": "",
                "isSavePass": "on",
                "Submit1": "",
                "Language": "Chinese",
                "ClientIP": self.getIP(),
                "timeoutvalue": 45,
                "heartbeat": 240,
                "fastwebornot": False,
                "StartTime": self.getNowTime(),
                #持续时间,超过这个时间自动掉线,可进行设置
                "shkOvertime": self.overtime,
                "strOSName": "",
                "iAdptIndex": "",
                "strAdptName": "",
                "strAdptStdName": "",
                "strFileEncoding": "",
                "PhysAddr": "",
                "bDHCPEnabled": "",
                "strIPAddrArray": "",
                "strMaskArray": "",
                "strMask": "",
                "iDHCPDelayTime": "",
                "iDHCPTryTimes": "",
                "strOldPrivateIP": self.getIP(),
                "strOldPublicIP": self.getIP(),
                "strPrivateIP": self.getIP(),
                "PublicIP": self.getIP(),
                "iIPCONFIG":0,
                "sHttpPrefix": "http://192.168.8.10",
                "title": "CAMS Portal"
            }
            #消息头
            headers = {
                'User-Agent' : 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36',
                'Host': '192.168.8.10',
                'Origin': 'http://192.168.8.10',
                'Referer': 'http://192.168.8.10/portal/index_default.jsp?Language=Chinese'
            }
            post_data = urllib.urlencode(data)
            login_url = "http://192.168.8.10/portal/login.jsp?Flag=0"
            request = urllib2.Request(login_url, post_data, headers)
            response = urllib2.urlopen(request)
            result = response.read().decode('gbk')
            self.getLoginResult(result)
     
     
        #打印登录结果
        def getLoginResult(self, result):
            if u"用户上线成功" in result:
                print self.getCurrentTime(),u"用户上线成功,在线时长为",self.overtime/60,"分钟"
            elif u"您已经建立了连接" in result:
                print self.getCurrentTime(),u"您已经建立了连接,无需重复登陆"
            elif u"用户不存在" in result:
                print self.getCurrentTime(),u"用户不存在,请检查学号是否正确"
            elif u"用户密码错误" in result:
                pattern = re.compile('<td>.*?2553:(.*?)</b>.*?</td>', re.S)
                res = re.search(pattern, result)
                if res:
                    print self.getCurrentTime(),res.group(1),u"请重新修改密码"
            else:
                print self.getCurrentTime(),u"未知错误,请检查学号密码是否正确"
     
        #获取当前时间戳,13位
        def getNowTime(self):
            return str(int(time.time()))+"000"
     
        #获取本机无线IP
        def getIP(self):
            local_iP = socket.gethostbyname(socket.gethostname())
            if self.ip_pre in str(local_iP):
                return str(local_iP)
            ip_lists = socket.gethostbyname_ex(socket.gethostname())
     
            for ip_list in ip_lists:
                if isinstance(ip_list, list):
                    for i in ip_list:
                        if self.ip_pre in str(i):
                            return str(i)
                elif type(ip_list) is types.StringType:
                    if self.ip_pre in ip_list:
                        return ip_list
     
        #判断当前是否可以联网
        def canConnect(self):
            fnull = open(os.devnull, 'w')
            result = subprocess.call('ping www.baidu.com', shell = True, stdout = fnull, stderr = fnull)
            fnull.close()
            if result:
                return False
            else:
                return True
     
        #获取当前时间
        def getCurrentTime(self):
            return time.strftime('[%Y-%m-%d %H:%M:%S]',time.localtime(time.time()))
     
        #主函数
        def main(self):
            print self.getCurrentTime(), u"您好,欢迎使用模拟登陆系统"
            while True:
                nowIP = self.getIP()
                if not nowIP:
                    print self.getCurrentTime(), u"请检查是否正常连接QLSC_STU无线网络"
                else:
                    print self.getCurrentTime(),u"成功连接了QLSC_STU网络,本机IP为",nowIP
                    self.login()
                    while True:
                        can_connect = self.canConnect()
                        if not can_connect:
                            nowIP = self.getIP()
                            if not nowIP:
                                print self.getCurrentTime(), u"当前已经掉线,请确保连接上了QLSC_STU网络"
                            else:
                                print self.getCurrentTime(), u"当前已经掉线,正在尝试重新连接"
                                self.login()
                        else:
                            print self.getCurrentTime(), u"当前网络连接正常"
                        time.sleep(self.every)
                time.sleep(self.every)
     
    login = Login()
    login.main()


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

    python login.py

    当前是可以联网的,我分别在网页上操作执行了断开,操作,程序自动检测到掉线,自动重新连接。 接下来我直接断开了 QLSC_STU 网络的链接,程序同样检测到 QLSC_STU 这个热点没有连接上,提示用户链接。 接下来我重新连接上了这个热点,由于刚才已经登录上线,且持续时间较短,网络自动恢复正常。 下面是运行结果:

    如何解决Python爬虫中的网络掉线问题?

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


    以上就是Python爬虫解决网络掉线的办法。被网络问题困扰多年的小编,试过之后已经翻身了。各位小伙伴们真的不心动吗?学会了不仅可以修自家的网络,改善下男神女神的上网环境也是不错的选择哦。



    起源地下载网 » 如何解决Python爬虫中的网络掉线问题?

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元