Написал парсер на питоне. Копирует контент с чужого форума на мой форум, однако, то ли из-за таймаута на том или на моем форуме, то ли из-за проблем в соединении, парсер периодически вырубается из-за ошибок. Сейчас сделал так, чтобы парсер не вырубался, а вместо этого выводился текст в консоли и шел повтор запроса. Но это не решает проблему - эти повторы могут идти до бесконечности - а стоит закрыть и заново запустить скрипт - то все работает. Ниже прилагаю куски кода, где стоят try except. Может что-то не так сделал? Можно ли это на что-то заменить, чтобы при ошибке, происходил пропуск и дальнейшая работа скрипта? Скрипт копирует контент с нескольких форумов, поэтому важно чтобы при ошибке в соединении с одним форумом - шла работа дальше, со вторым и третьим форумом и т.д. Спасибо.
def in_go(self):#Вход на целевой форум/сайт
global pars
pars=Grab(log_file=self.name_log)
pars.setup(connect_timeout=30, timeout=30)
while self.err!="1":
try:
pars.go(self.url_login)
pars.doc.set_input(self.user, self.login)#Вводим имя пользователя
pars.doc.set_input(self.passwrd, self.password)#Вводим пароль
if self.cookie_length==True:
pars.doc.set_input('cookielength', self.cook_length)#Выставляем время сессии
pars.doc.submit()#Нажатие кнопки "Регистрация"
#pars.go(self.url_profile_pars)#Дополнительная проверка входа на целевой форум
except:
print "НЕУДАЧНЫЙ ВХОД. ПОВТОР ЧЕРЕЗ 5 СЕК..."
time.sleep(self.timeout)
else:
break
print pars.doc.select('//title').text(), "\nУСПЕШНЫЙ ВХОД\n\n"#Выводим название сайта
def copy_info(self):
while self.err!="1":
try:
pars.go(self.url_recent)#Переход к последним сообщениям
self.board=(pars.doc.select(self.xpath_board)).text()#копируем имя раздела
Title=(pars.doc.select(self.xpath_title)).text()#Копируем имя темы
Title=Title.replace('Re: ','')#Удаляем в начале названия темы Re:
Title=Title.replace(u'Ответ: ', '')#Удаляем в начале названия темы Отвте:
self.title=Title.replace('"','')#Удаляем кавычки необходимо для корректных запросов
self.nik=(pars.doc.select(self.xpath_nik)).text()#Копируем ник пользователя
Post=(pars.doc.select(self.xpath_post)).html()#Копируем HTML код сообщения
except:
print "ОШИБКА ЧТЕНИЯ ДАННЫХ. ПОВТОР ЗАПРОСА, ЧЕРЕЗ 5 СЕК..."
time.sleep(self.timeout)
else:
break
while self.err!="1":
try:
pars.go((pars.doc.select(self.xpath_recent)).attr('href'))#Переход на страницу в тему с последним сообщением
except:
print "ОШИБКА ПЕРЕХОДА НА СТРАНИЦУ С ПОСЛЕДНИМИ СООБЩЕНИЯМИ. ПОВТОР ЧЕРЕЗ 5 СЕК..."
time.sleep(self.timeout)
else:
break