解析器返回奇怪的脚本

时间:2012-06-09 00:35:10

标签: objective-c ios parsing

我正在尝试解析this page。 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 =”。我怎样才能拿到这张桌子?

1 个答案:

答案 0 :(得分: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]);

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