0

我正在尝试解析此页面。NSLog 给了我奇怪的结果:

Aktualne kursy walut - Alior Bank
if( window.opera ) {
    if ('fast' == history.navigationMode) {
        history.navigationMode = 'automatic';
        location.reload();
    } else {
        history.navigationMode = 'fast';
    }
}

它可以是什么?解析此页面的正确方法在哪里?我的工作代码:

NSError * error = nil;
    HTMLParser * parser = [[HTMLParser alloc] initWithContentsOfURL:[NSURL URLWithString:@"http://www.aliorbank.pl/pl/o_banku/kursy_walut/kursy_walut_aktualne/main"] error:&error];    
    if (error) {
        NSLog(@"Error: %@", error);
        parser = nil;
        return 0;
    }
    HTMLNode * bodyNode = [parser doc];

    NSLog(@"parser = %@", [bodyNode allContents]);

编辑 我想用汇率值解析表格。但是,当我尝试使用“currencyTable”类搜索表时,我什么也得不到。我的代码:

HTMLNode * bodyNode = [parser doc];
HTMLNode *myNode = [bodyNode findChildOfClass:@"currencyTable"];
NSLog(@"table = %@", [myNode allContents]);

NSLog 给了我“table =”。我怎样才能得到这张桌子?

4

1 回答 1

1

我查看了源码

view-source:http://www.aliorbank.pl/pl/o_banku/kursy_walut/kursy_walut_aktualne/main

(在 Chrome 中打开)

该文件的,它似乎只返回标签之间的信息。

例如,标题标签是:

<title>Aktualne kursy walut - Alior Bank</title>

您回复的第一部分是:

Aktualne kursy walut - Alior Bank

下一段在标签之间有任何文本的 html 源代码是:

<script>
if( window.opera ) {
    if ('fast' == history.navigationMode) {
        history.navigationMode = 'automatic';
        location.reload();
    } else {
        history.navigationMode = 'fast';
    }
}
</script>

再次,它返回这些标签之间的文本:

 if( window.opera ) {
    if ('fast' == history.navigationMode) {
        history.navigationMode = 'automatic';
        location.reload();
    } else {
        history.navigationMode = 'fast';
    }
}

我不明白这是一个“奇怪”的结果。总的来说,我想我不得不问,你期待什么?

编辑

看过文档中的示例,我会这样尝试:

NSError * error = nil;
HTMLParser * parser = [[HTMLParser alloc] initWithContentsOfURL:[NSURL URLWithString:@"http://www.aliorbank.pl/pl/o_banku/kursy_walut/kursy_walut_aktualne/main"] error:&error];    
if (error) {
    NSLog(@"Error: %@", error);
    parser = nil;
    return 0;
}
HTMLNode * bodyNode = [parser body];
NSArray *tableNodes = [bodyNode findChildTags:@"input"];

HTMLNode *tableToParse = nil;
for (HTMLNode *tableNode in tableNodes) 
{
    if ([[tableNode getAttributeNamed:@"class"] isEqualToString:@"currencyTable"]) 
    {
         tableToParse = tableNode;
         break;
    }
}

//Proceed to parse this table node in a similar way.
NSLog(@"Table to parse : %@", [tableToParse rawContents]);

请注意,我没有测试过这段代码,这只是从文档中编写的。

于 2012-06-09T01:02:25.777 回答