gpt4 book ai didi

ios - iOS html/xml用TFHpple解析Google购物结果

转载 作者:行者123 更新时间:2023-12-01 19:09:10 24 4
gpt4 key购买 nike

有没有什么方法可以使用TFHpple解析google购物结果,而无需使用google API(不建议使用),但使用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
...

但无所事事,输出控制台消息始终相同:UNABLE TO PARSE。

最佳答案

我发现了各种问题,最后我解决了所有问题。
首先,必须对添加的URL进行编码:

myURL = [myURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

然后,在原始(和实际)TFHPPLE代码(恰好为XPathQuery.m)内部解析阶段将崩溃,因为任何时候nodeContent和Raw均为NIL。
因此,为了解决此崩溃问题,我进行了更改
[resultForNode setObject:currentNodeContent forKey:@"nodeContent"];

与(两个行都注意[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造成的,请尝试使用调用父方法(并且您的viewcontroller不会冻结等待解析器的时间):
_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];
});

关于ios - iOS html/xml用TFHpple解析Google购物结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17791849/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com