【问题标题】:I'm trying to extract data from a webpage using nsparser我正在尝试使用 nsparser 从网页中提取数据
【发布时间】:2012-07-26 20:16:48
【问题描述】:
    -(NSMutableArray *)titlesFromString:(NSString *) pageData
{
    NSMutableArray *foundTitles=[[NSMutableArray alloc] init];
 NSScanner *scaningPage = [NSScanner scannerWithString:pageData];

    NSString *title;
    for (int i =0;i<4;i++) {
    [scaningPage scanUpToString:@"class='topic_title" intoString:NULL];
    [scaningPage scanUpToString:@">" intoString:NULL];
    scaningPage.scanLocation++;
    [scaningPage scanUpToString:@"</a></h4>" intoString:&title];
    [foundTitles addObject:title];
    }


   status.text = [[NSNumber numberWithInt:[foundTitles count]] stringValue];
    for (NSString *titlesLife in foundTitles){
        [results.text stringByAppendingString:@"\n"];
        [results.text stringByAppendingString:titlesLife];
    }
   return(nil);

}

现在我将返回 nil,直到它开始工作。 我从 connectionDidFinishLoading 调用这个方法。

在文档中他们使用了一个while循环 while ([theScanner isAtEnd] == NO){} 但他们也在常规数据集上执行此操作,其中最后扫描的内容位于字符串的末尾,所以我猜这就是我遇到边界问题的原因。 我还看到了 RegexKit 框架,它可能比解析器工作得更好。 直到我得到while循环才发现我有一个for循环只是获取一些信息。 我在想我需要检查是否存在另一个元素,如果没有,则进行扫描,以免扫描仪超出范围。

我也很困惑,为什么我需要在将“>”扫描为 null 后增加扫描仪位置,否则我最终会得到类似“> 现在正在播放什么歌曲???”之类的字符串 当我认为使用 initWithContentsOfUrl 可能更简单但获得连接路由的经验时,我也在使用 NSURLConnection 来获取数据。

第二个部分是我试图将我的结果添加到结果 UITextView 中,这似乎不起作用。我不应该 setNeedsDisplay 应该吗?我以为那只是在代码中绘制视图时。 感谢您的任何建议。

【问题讨论】:

    标签: objective-c nsstring uitextview


    【解决方案1】:

    第 2 部分:

    您将额外的文本添加到标签的文本中,然后将其丢弃:)

    试试这样的:

    results.text = [results.text stringByAppendingString:@"\n"];
    

    第 1 部分要复杂得多。

    处理 HTML 是一个出了名的棘手问题 :( 但是,您的问题有一个很好的答案 here on stack overflow。我从未使用过那个库,但 +61 票可能是一个很好的迹象 :)

    【讨论】:

    • 哈哈。甜谢谢你。我会检查其他解析器。但我想我想通了。在文档中,它显示了如何使用解析器方法的返回值作为布尔值,如果我在 if 内部使用它作为条件,则表明它的存在,而我想我可以只说 if ([parser findsSomething]) {}else{ quit=true} 并使用 quit 作为重复条件。
    • 看起来我可以使用 nsregularexpressions 而不是它的捕获。似乎我遇到了使用 nsscanner 动态查找内容的边界问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多