اكتشاف المهلة erros في urlopen urllib2 من بيثون
سؤال
ما زلت جديدًا نسبيًا على Python ، لذلك إذا كان هذا سؤالًا واضحًا ، أعتذر.
سؤالي فيما يتعلق بمكتبة urllib2 ، وهي وظيفة urlopen. حاليًا أستخدم هذا لتحميل كمية كبيرة من الصفحات من خادم آخر (فهي جميعها على نفس المضيف البعيد) ولكن يتم قتل البرنامج النصي بين الحين والآخر عن طريق خطأ في مهلة (أفترض أن هذا من الطلبات الكبيرة).
هل هناك طريقة للحفاظ على البرنامج النصي بعد مهلة؟ أود أن أكون قادرًا على جلب جميع الصفحات ، لذلك أريد نصًا سيستمر في المحاولة حتى يحصل على صفحة ، ثم ينتقل.
في ملاحظة جانبية ، هل سيبقي الاتصال بالاتصال لمساعدة الخادم؟
المحلول
في المرة القادمة التي يحدث فيها الخطأ ، لاحظ رسالة الخطأ. سيخبرك السطر الأخير بنوع الاستثناء. على سبيل المثال ، قد يكون urllib2.HTTPError
. بمجرد أن تعرف نوع الاستثناء الذي أثير ، يمكنك التقاطه في try...except
الكتلة. فمثلا:
import urllib2
import time
for url in urls:
while True:
try:
sock=urllib2.urlopen(url)
except (urllib2.HTTPError, urllib2.URLError) as err:
# You may want to count how many times you reach here and
# do something smarter if you fail too many times.
# If a site is down, pestering it every 10 seconds may not
# be very fruitful or polite.
time.sleep(10)
else:
# Success
contents=sock.read()
# process contents
break # break out of the while loop
نصائح أخرى
الدليل المفقود لـ urllib2 قد يساعدك