首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用TFHpple解析网页

用TFHpple解析网页
EN

Stack Overflow用户
提问于 2016-01-10 06:24:52
回答 2查看 690关注 0票数 0

我正在尝试编写一个非常简单的iOS应用程序,它将解析一个网页(http://arxiv.org/list/cond-mat/recent)并显示它的简化版本。我选择使用TFHpple来解析这个页面。我想要得到标题的论文,并显示在TableViewController。用于纸张描述的HTML容器如下所示:

代码语言:javascript
复制
<div class="list-title">
<span class="descriptor">Title:</span> Encoding Complexity within Supramolecular Analogues of Frustrated  Magnets
</div>

用于解析和获取值的函数如下(感谢raywenderlich.com):

代码语言:javascript
复制
- (void) loadPapers{
    NSURL *papersURL = [NSURL URLWithString:@"http://www.arxiv.org/list/cond-mat/recent"];
    NSData *papersHTMLData = [NSData dataWithContentsOfURL:papersURL];

    TFHpple *papersParser = [TFHpple hppleWithHTMLData:papersHTMLData];

    NSString *papersXpathQueryString = @"//div[@class='list-title']";
    NSArray *papersNodes = [papersParser searchWithXPathQuery:papersXpathQueryString];

    NSMutableArray *newPapers = [[NSMutableArray alloc] initWithCapacity:0];

    for (TFHppleElement *element in papersNodes){
        Paper *paper = [[Paper alloc] init];
        [newPapers addObject:paper];

        paper.title = [[element firstChild] content];
    }

    _objects = newPapers;
    [self.tableView reloadData];

}

这个函数应该解析整个HTML页面并将数据返回到TableView中。但是,当我尝试时,它会将空对象返回到paperNodes数组中。基本上,元素的数量是正确的(~25),但是它们都是空的,我不知道为什么。

任何帮助都是非常感谢的!谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-15 09:50:45

我已经用HTMLKit重写了您的代码。看起来是这样的:

代码语言:javascript
复制
NSURL *papersURL = [NSURL URLWithString:@"http://www.arxiv.org/list/cond-mat/recent"];
NSData *papersHTMLData = [NSData dataWithContentsOfURL:papersURL];
NSString *htmlString = [[NSString alloc] initWithData:papersHTMLData encoding:NSUTF8StringEncoding];

HTMLDocument *document = [HTMLDocument documentWithString:htmlString];

NSArray *divs = [document querySelectorAll:@"div[class='list-title']"];

for (HTMLElement *element in divs) {
    NSLog(@"%@", element.textContent);
}

回到你在评论中的问题:

您能给出一些有用的链接,您认为这些链接可以帮助您了解HTMLKit吗?

您可以查看项目的GitHub页面上的示例。源代码是文档化的,使用它相对简单。如果您有基本的HTML和CSS体验,那么使用HTMLKit也同样容易。不幸的是,它还没有其他资源来学习它。

票数 1
EN

Stack Overflow用户

发布于 2016-01-10 09:51:43

可能元素firstChild正在返回零。我建议您添加一些NSLog语句来跟踪数据提取并帮助您定位错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34702731

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档