[ios]HTML 表解析 xcode

标签: ios Objective-C
发布时间: 2017/3/21 22:56:13
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我试图解析: [www.neiu.edu/~neiutemp/PhoneBook/alpha.htm] 使用 TFHPPLE 分析器和我正在寻找 1 TD (第一列) 从表中每个 TR (行)。这里的 TDs 的所有属性都是相同的。我不能区分 TDs。
我能够得到的所有 HTML 代码,但无法从每个 TR 获得 1 TD。后 // 3 (在代码中) tutorialsNodes 为空。输出

NSLog(@"Nodes are : %@",[tutorialsNodes description]);

Practice1 [62351:c07] 节点是: ()。

我看不到有什么不对。任何帮助将不胜感激。 我来解析此 URL 的代码︰

NSURL *tutorialsUrl = [NSURL URLWithString:@"http://www.neiu.edu/~neiutemp/PhoneBook/alpha.htm"];
NSData *tutorialsHtmlData = [NSData dataWithContentsOfURL:tutorialsUrl];

// 2
TFHpple *tutorialsParser = [TFHpple hppleWithHTMLData:tutorialsHtmlData];

// 3
NSString *tutorialsXpathQueryString = @"//TR/TD";
NSArray *tutorialsNodes = [tutorialsParser searchWithXPathQuery:tutorialsXpathQueryString];
NSLog(@"Nodes are : %@",[tutorialsNodes description]);
// 4
NSMutableArray *newTutorials = [[NSMutableArray alloc] initWithCapacity:0];
for (TFHppleElement *element in tutorialsNodes) {
    // 5
    Tutorial *tutorial = [[Tutorial alloc] init];
    [newTutorials addObject:tutorial];

    // 6
    tutorial.title = [[element firstChild] content];

    // 7
    tutorial.url = [element objectForKey:@"href"];

    NSLog(@"title is: %@",[tutorial.title description]);
}

// 8
_objects = newTutorials;
[self.tableView reloadData];

解决方法 1:

这应该工作如果您使用 @"//tr/td" 而不是 @"//TR/TD"

看看你的 HTML,虽然,因为作者的显然不知道如何拼写 CSS,你有字体标签埋在整个源文件。所以,你下的一行代码,显然取自优良Hpple 教程由马特加洛韦雷 Wenderlich 网站上,说︰

tutorial.title = [[element firstChild] content];

但这不会在这里,工作,因为大部分的您的条目, firstChild 不是 text ,而是 font 标记。所以你可以检查看看它是否字体标记如下所示︰

TFHppleElement *subelement = [element firstChild];
if ([[subelement tagName] isEqualToString:@"font"])
    subelement = [subelement firstChild];
tutorial.title = [subelement content];

或者,你可以改只是搜索 @"//tr/td/font" 而不是 @"//tr/td" 。这里的方法很多。(像所有 HTML 解析) 伎俩要使它合理可靠,这样你就不会容易受到小化妆品调整页面。

于是很显然,你的 HTML 不有 Url,这样代码就在这里不适用。

无论如何,我希望这是足以让你去。


你报告有问题,所以我有只供应更完整的代码示例︰

NSURL *tutorialsUrl = [NSURL URLWithString:@"http://www.neiu.edu/~neiutemp/PhoneBook/alpha.htm"];
NSData *tutorialsHtmlData = [NSData dataWithContentsOfURL:tutorialsUrl];

TFHpple *tutorialsParser = [TFHpple hppleWithHTMLData:tutorialsHtmlData];

NSString *tutorialsXpathQueryString = @"//tr/td";
NSArray *tutorialsNodes = [tutorialsParser searchWithXPathQuery:tutorialsXpathQueryString];

if ([tutorialsNodes count] == 0)
    NSLog(@"nothing there");
else
    NSLog(@"There are %d nodes", [tutorialsNodes count]);

NSMutableArray *newTutorials = [[NSMutableArray alloc] initWithCapacity:0];
for (TFHppleElement *element in tutorialsNodes) {

    Tutorial *tutorial = [[Tutorial alloc] init];
    [newTutorials addObject:tutorial];

    TFHppleElement *subelement = [element firstChild];
    if ([[subelement tagName] isEqualToString:@"font"])
        subelement = [subelement firstChild];
    tutorial.title = [subelement content];

    NSLog(@"title is: %@", [tutorial.title description]);
}

这会产生以下输出︰

2013-05-10 19:39:42.027 hpple-test[33881:c07] There are 10773 nodes
2013-05-10 19:39:42.028 hpple-test[33881:c07] title is: A
2013-05-10 19:39:46.027 hpple-test[33881:c07] title is: (null)
2013-05-10 19:39:46.698 hpple-test[33881:c07] title is: (null)
2013-05-10 19:39:47.333 hpple-test[33881:c07] title is: (null)
2013-05-10 19:39:47.827 hpple-test[33881:c07] title is: (null)
2013-05-10 19:39:48.358 hpple-test[33881:c07] title is: (null)
2013-05-10 19:39:49.133 hpple-test[33881:c07] title is: (null)
2013-05-10 19:39:49.775 hpple-test[33881:c07] title is: Abay, Hiwet B
2013-05-10 19:39:50.326 hpple-test[33881:c07] title is: H-Abay
2013-05-10 19:39:50.992 hpple-test[33881:c07] title is: 773-442-5140
2013-05-10 19:39:51.597 hpple-test[33881:c07] title is: (null)
2013-05-10 19:39:52.092 hpple-test[33881:c07] title is: Controller
2013-05-10 19:39:52.598 hpple-test[33881:c07] title is: E
2013-05-10 19:39:53.149 hpple-test[33881:c07] title is: 223
2013年-05-10 19:39:55.040 hpple-测试 [33881:c07] 标题是︰ 在特伦斯 
2013年-05-10 19:39:55.806 hpple-测试 [33881:c07] 标题是︰ T 在
2013年-05-10 19:39:56.525 hpple-测试 [33881:c07] 标题是︰ 773-442-5339
...
官方微信
官方QQ群
31647020