Я выполняю несколько уровней парсинга веб-страниц, где я использую информацию с одной страницы для детализации и захвата «нижней» страницы для анализа.Когда я достигаю самого низкого уровня своей иерархии, я больше не захожу на новую страницу, я в основном нажимаю на ту же (с другими параметрами) и делаю записи базы данных SQL.
Если я не замедляю работу(помещая sleep (1)) перед этим внутренним циклом, initWithContentsOfURL в конечном итоге возвращает своего рода заглушку HTML.Вот код, который я использую для получения моих узлов HTML:
NSError *err = nil;
NSString* webStringURL = [sURL stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];
NSData *contentData = [[[NSData alloc] initWithContentsOfURL: [NSURL URLWithString: webStringURL]
options: 0
error: &err] autorelease];
NSString *dataString = [[[NSString alloc] initWithData: contentData
encoding: NSISOLatin1StringEncoding] autorelease];
NSData *data = [dataString dataUsingEncoding: NSUTF8StringEncoding];
TFHpple *xPathDoc = [[[TFHpple alloc] initWithHTMLData: data] autorelease];
Он отлично работает с 4 уровнями зацикливания.В faxt он может работать круглосуточно без проблем с утечкой памяти.Умирает только тогда, когда у меня проблема с подключением.Это до тех пор, пока я вставляю sleep (1) перед самым внутренним циклом.
Как будто это слишком быстро и initWithContentsOfURL не может идти в ногу.Я полагаю, я мог бы попытаться сделать что-то асинхронное, но это не для потребления пользователем, а прямая синхронная зацикленность работает просто отлично ... почтиЯ пробовал разные способы замедления.Работает пауза на одну секунду на регулярной основе, но если я уберу это, она начнет получать поддельные данные примерно через 10 раз через внутренний цикл.Есть ли способ справиться с этим правильно?