有没有办法不用google API就能用TFHpple解析谷歌购物结果(不推荐使用),而使用url却很简单,比如:https://www.google.com/search?hl=en&tbm=shop&q=AudiR8?
我尝试过很多类型的标签:
...
myCar = @"Audi R8";
myURL = [NSString stringWithFormat:@"https://www.google.com/search?hl=en&tbm=shop&q=%@",myCar];
NSData *htmlData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:myURL]];
TFHpple *xpath = [[TFHpple alloc] initWithHTMLData:htmlData];
//use xpath to search element
NSArray *elements = [NSArray new];
elements = [xpath searchWithXPathQuery:@"//html//body"]; // <-- tags
...但没什么可做的,总是输出控制台消息:无法解析。
发布于 2013-07-25 17:47:00
我发现了各种各样的问题,最后都解决了。首先,有必要对URL进行编码,添加:
myURL = [myURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];然后,在原始(和实际的) TFHPPLE代码(确切地说是XPathQuery.m)中,解析阶段将崩溃,因为任何时候nodeContent和Raw都为空。
[resultForNode setObject:currentNodeContent forKey:@"nodeContent"];with (注意两行[resultForNode...:
if (currentNodeContent != nil)
[resultForNode setObject:currentNodeContent forKey:@"nodeContent"];和:
[resultForNode setObject:rawContent forKey:@"raw"];通过以下方式:
if (rawContent != nil)
[resultForNode setObject:rawContent forKey:@"raw"];我想记住这一点,因为google使用的html代码比较难,所以我决定使用这些xpathqueries:
...
NSArray *elementsImages = [NSArray new];
NSArray *elementsPrices = [NSArray new];
elementsImages = [xpath searchWithXPathQuery:@"//html//*[@class=\"psliimg\"]"];
elementsPrices = [xpath searchWithXPathQuery:@"//html//*[@class=\"psliprice\"]"];
...另一个不便之处是,当您决定使用for或while循环来检索各种html页面时,实际上,如果您使用:
NSData *htmlData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:myURL]];在此周期中,initWithContenctsOfURL多次无法正确获取页面(调试控制台编写了著名的UNABLE TO PARSE ),因此我决定使用以下命令更改它:
// Send a synchronous request
NSURLRequest * urlRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:myURL]];
NSURLResponse * response = nil;
NSError * error = nil;
NSData * data = [NSURLConnection sendSynchronousRequest:urlRequest
returningResponse:&response
error:&error];
if (error == nil)
{
// Parse data here
}如果你不想等待这个循环,因为它被同步的NSURLRequests弄乱了,试着用(并且你的视图控制器不会在等待解析器时冻结)调用父方法:
_dispatch_queue_t *queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async( _queue, // now i call my google shopping parser cycle
^{
[self GShoppingParser];
});发布于 2013-07-23 00:03:11
你能试着换一下下面这行吗?
NSData *htmlData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:myURL]];至
NSData *Data = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:myURL]];还有下面这行
TFHpple *xpath = [[TFHpple alloc] initWithHTMLData:htmlData];至
TFHpple *xpathParser = [[TFHpple alloc] initWithHTMLData:data]; 如果这有帮助,请让我知道,您可能还需要在代码中更改一行。
祝你编码愉快!
https://stackoverflow.com/questions/17791849
复制相似问题