Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 跳过连接中断(站点和组)_Python_Sockets_Beautifulsoup_Keep Alive - Fatal编程技术网

Python 跳过连接中断(站点和组)

Python 跳过连接中断(站点和组),python,sockets,beautifulsoup,keep-alive,Python,Sockets,Beautifulsoup,Keep Alive,我目前正在使用脚本执行此操作: 获取正文(从源代码)并搜索字符串,直到找到字符串为止。(如果网站更新。) 尽管如此,如果连接丢失,脚本将停止 我的“连接”代码如下所示(每隔20秒在while循环中不断重复): 我使用了urlib2和beautifulsou 谁能告诉我,如果连接丢失,我如何告诉脚本“冻结”,并查看internet连接是否处于活动状态?然后根据答案继续。(因此,检查脚本是否可以连接,而不是查看站点是否已启动。如果以这种方式进行检查,脚本将因一系列错误而停止。) 谢谢大家! 我不想“

我目前正在使用脚本执行此操作:

获取正文(从源代码)并搜索字符串,直到找到字符串为止。(如果网站更新。)

尽管如此,如果连接丢失,脚本将停止

我的“连接”代码如下所示(每隔20秒在while循环中不断重复):

我使用了urlib2和beautifulsou

谁能告诉我,如果连接丢失,我如何告诉脚本“冻结”,并查看internet连接是否处于活动状态?然后根据答案继续。(因此,检查脚本是否可以连接,而不是查看站点是否已启动。如果以这种方式进行检查,脚本将因一系列错误而停止。)

谢谢大家!

我不想“冻结”脚本,而是希望只有在连接处于活动状态时脚本才能继续运行。如果它是活动的,请运行代码。如果它不活动,请尝试重新连接或停止执行

while keepRunning:
   if connectionIsAlive():
      run_your_code()
   else:
      reconnect_maybe()
这里介绍了一种检查连接是否处于活动状态的方法

如果您的程序“由于一系列错误而停止”,那么这很可能是因为您没有正确处理无法连接到站点的情况(由于各种原因,例如您没有互联网、他们的网站关闭等)

您需要使用
try/except
块来确保捕获由于无法打开实时连接而发生的任何错误

try:
   openUrl = opener.open(url).read()
except urllib2.URLError:
   # something went wrong, how to respond?
找到了解决办法

所以,在实际操作之前,我需要检查每个循环的连接

所以我创建了这个函数:

def check_internet(self):
    try:
        header = {"pragma" : "no-cache"}
        req = urllib2.Request("http://www.google.ro", headers=header)
        response = urllib2.urlopen(req,timeout=2)
        return True
    except urllib2.URLError as err:
        return False
它工作了,在我的连接断开和断开的情况下进行了测试

对于其他新手:

while True:
     conn = check_internet('Site or just Google, just checking for connection.')
     try:
         if conn is True:
         #code
         else:
         #need to make it wait and re-do the while.
         time.sleep(30)
     except: urllib2.URLError as err:
         #need to wait
         time.sleep(20)
工作完美,脚本已经运行了大约10个小时,它可以完美地处理错误!它还可以在我的连接关闭时工作,并显示正确的消息


开放的优化建议

你好-谢谢,但这不是我想要的,我想我还不够清楚。首先,我想让Python检查我的internet连接是否正常。如果它在没有internet连接的情况下检查站点的状态,它将再次停止并出现一系列错误。我需要它说“好的,连接起来了”,然后它继续做我要求它做的任何事情。谢谢。你不需要知道你是否有网络,这并不重要。重要的是你是否能够连接到那个网站。检查你是否有互联网连接可以像尝试访问一个网站一样简单,你知道这个网站应该像谷歌一样100%的运行。谢谢-这很有帮助,但是忘记了回复。检查连接是否正常并不重要,检查网站是否在运行更重要。所以你真正应该做的是尝试连接到你的目标网站(不是谷歌);如果状态代码是以4或5开头的,请等待。否则,尝试处理请求。脚本就是这样做的。好吧,只是没有响应处理。但值得注意。我只是忘了把它改到我的网站上。我有点“我想检查我的连接”的心态。非常感谢,我将查找回复以及如何阅读它们!没有响应处理…我认为@BurhanKhalid意味着你必须检查响应(…网站正在运行->更重要),如果你不这样做,那么你只是在检查连接(不那么重要)
while True:
     conn = check_internet('Site or just Google, just checking for connection.')
     try:
         if conn is True:
         #code
         else:
         #need to make it wait and re-do the while.
         time.sleep(30)
     except: urllib2.URLError as err:
         #need to wait
         time.sleep(20)