获取objective-c中的网页源代码

时间:2014-05-27 15:41:26

标签: ios objective-c

我开始在iOS开发,我有下一个问题:

我需要提取网页的页面源以从中提取一些数据。

有一些网址,我已经取消了,有些则不是

这是我获取页面源代码的代码:

   (NSString *)getStringFromUrl:(NSString *)url{

    NSError *err = nil;  
    NSString *agentString = @"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-us) AppleWebKit/525.27.1 (KHTML, like Gecko) Version/3.2.1 Safari/525.27.1";
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:
                                    [NSURL URLWithString:url]];

    [request setValue:agentString forHTTPHeaderField:@"User-Agent"];


    NSData *data = [ NSURLConnection sendSynchronousRequest:request returningResponse: nil error: &err ];
    NSString *returnData = [[NSString alloc] initWithBytes: [data bytes] length:[data length] encoding: NSUTF8StringEncoding];

    if (err!=nil)
        NSLog(@"error message: %@",err.description);
    return returnData;
}

对我有用的链接:

http://50.22.211.228:8000/played.html

对我不起作用的链接并在nil中返回returnData

http://107.150.5.94:7070/played.html

2 个答案:

答案 0 :(得分:1)

问题似乎是第二个请求显然没有返回有效NSUTF8StringEncoding。如果您查看NSData本身(如果您记录它,您将看到二进制有效负载的十六进制表示),则表示您正在接收数据,但这是转换为失败的NSString

如果你在网页浏览器中查看该页面,它也会感到困惑(这些字符没有意义)。我打赌他们没有在那个HTML中写一个有效的UTF8字符串,虽然现在并不是很明显他们正在做什么(它似乎不是我认识的字符串编码)。

您可以使用NSASCIIStringEncoding查看您在网络浏览器中看到的代码中的相同内容。

答案 1 :(得分:0)

我使用以下内容将网页的源代码作为NSString:

NSError *error = nil;
NSString *urlString = [NSString stringWithFormat:@"%@", @"http://www.google.es"];
NSURL *url = [NSURL URLWithString:[urlString stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding]];
NSString *webSource = [NSString stringWithContentsOfURL:url encoding:NSASCIIStringEncoding error:&error];

我希望这对你有所帮助,也是你正在寻找的。