跳过连接中断(Site& BeautifulSoup)

时间:2013-12-03 04:56:50

标签: python sockets beautifulsoup keep-alive

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

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

Altough,如果连接丢失,脚本将停止。

我的'连接'代码看起来像这样(这每隔20秒就会在while循环中重复):

opener = urllib2.build_opener()
opener.addheaders = [('User-agent', 'Mozilla/5.0')]

url = ('url')
openUrl = opener.open(url).read()

soup = BeautifulSoup(openUrl)

我用过urllib2& BeautifulSoup。

任何人都可以告诉我,如果连接丢失,我怎么能告诉脚本“冻结”并查看互联网连接是否还活着?然后根据答案继续。(因此,检查脚本是否可以连接,而不是查看该站点是否已启动。如果以这种方式进行检查,脚本将以一堆错误停止。)

谢谢!

2 个答案:

答案 0 :(得分:1)

找到了解决方案!

所以,在实际做事之前,我需要检查每个LOOP的连接。

所以我创建了这个函数:

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

它有效,用我的连接测试它& amp;起来!

对于其他新手来说:

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个小时,它完美地处理错误!它也适用于我的连接并显示正确的消息。

打开优化建议!

答案 1 :(得分:0)

不是“冻结”脚本,而是只有在连接处于活动状态时才会继续运行脚本。如果它还活着,请运行您的代码。如果它不活着,要么尝试重新连接,要么停止执行。

while keepRunning:
   if connectionIsAlive():
      run_your_code()
   else:
      reconnect_maybe()

此处描述了检查连接是否处于活动状态的一种方法Checking if a website is up via Python

如果您的程序“因一堆错误而停止”,那可能是因为您无法正确处理无法连接到网站的情况(出于各种原因,例如您没有互联网,他们的网站沮丧等等。)

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

try:
   openUrl = opener.open(url).read()
except urllib2.URLError:
   # something went wrong, how to respond?