我目前正在使用我的脚本执行此操作:
获取正文(来自源代码)并搜索字符串,直到找到字符串为止。 (如果网站更新。)
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。
任何人都可以告诉我,如果连接丢失,我怎么能告诉脚本“冻结”并查看互联网连接是否还活着?然后根据答案继续。(因此,检查脚本是否可以连接,而不是查看该站点是否已启动。如果以这种方式进行检查,脚本将以一堆错误停止。)
谢谢!
答案 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?