我正在对网页进行多层次的解析,我使用一页中的信息进行深入分析并抓取“较低”页面进行解析。当我到达我的层次结构的最低级别时,我不再点击新页面,我基本上点击相同的页面(使用不同的参数)并创建 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 级循环。在传真中,它可以 24/7 全天候运行,没有真正的内存泄漏问题。只有当我遇到连接问题时它才会死机。只要我在最里面的循环之前放入 sleep(1) 。
好像太快了,initWithContentsOfURL 跟不上。我想我可以尝试做一些异步的事情,但这不是为了用户消费,直接同步循环工作得很好......几乎。我尝试了不同的方法来减慢速度。定期暂停一秒钟是可行的,但如果我把它拿出来,它会在通过内部循环大约 10 次后开始获取虚假数据。有没有办法正确处理这个问题?