用oc写爬虫之HTMLParser

最近刚好有一些小需求,就尝试用OC来写一些简单的爬虫抓取网页上的数据;

发现了一个非常好用的HTMLParser工具 ;

语法是OC的,通过分析网页结构:可以很轻松的抓取需要的数据;

但是提前需要了解html标记语言,了解网页结构,需要分析网页源码,标签结构。

这里只是抛砖引玉,提供一个思路,有心的人会有意不到的收获!

使用的类库是:https://github.com/volodg/HTMLParser

1. 如下示例,解析一个列表里面的所有 a 连接

//解析一个列表的页面URL
+ (NSArray *)parseOneListUrl:(NSString *)listUrl
{
    NSURL *aurl = [NSURL URLWithString:listUrl];
    
    NSError *per;
    HTMLParser *ps = [[HTMLParser alloc]initWithContentsOfURL:aurl error:&per];
    if (per) {
        NSLog(@"%@",per);
        return nil;
    }
    
    HTMLNode *bodyNode = [ps body];
    HTMLNode *fnode = [bodyNode findChildWithAttribute:@"class" matchingName:@"movieList" allowPartial:YES];
    NSMutableArray *pgArr = [NSMutableArray arrayWithCapacity:1];
    NSArray *pgliArr = [fnode findChildTags:@"li"];
    for (HTMLNode *linode in pgliArr) {
        NSString *pgurl = [[linode findChildTag:@"a"] getAttributeNamed:@"href"];
        [pgArr addObject:[NSString stringWithFormat:@"%@%@",SITE_DOMAIN,pgurl]];
    }
    
    
    return [NSArray arrayWithArray:pgArr];
    
}

 首先是加载网页数据;

 然后分析网页中有个class="movieList" 的div,这里面就是我们要的 a 连接数据

 然后 解析这里面的所有 li 标签;

 然后解析里面所有的 a 标签;

 最后获取 a 标签里面 herf 中的url,这里就是我们要的数据;

2. 再来一个示例,下载一个页面里面指定的所有图片

//解析一个页面的所有图片URL
+ (NSArray *)parseOnePageIMGUrl:(NSString *)pageUrl
{
    NSURL *aurl = [NSURL URLWithString:pageUrl];
    
    NSError *per;
    HTMLParser *ps = [[HTMLParser alloc]initWithContentsOfURL:aurl error:&per];
    if (per) {
        NSLog(@"%@",per);
        return nil;
    }
    
    HTMLNode *bodyNode = [ps body];
    HTMLNode *fnode = [bodyNode findChildWithAttribute:@"class" matchingName:@"picContent" allowPartial:YES];
    
    NSMutableArray *imgUrlArr = [NSMutableArray arrayWithCapacity:1];
    NSArray *imgNDArr = [fnode findChildTags:@"img"];
    for (HTMLNode *imgNode in imgNDArr) {
        [imgUrlArr addObject:[imgNode getAttributeNamed:@"src"]];
    }
    

    return [NSArray arrayWithArray:imgUrlArr];
}

 如上先加载网页数据

 然后通过分析网页,发现 class="picContent" 的div 里面是我们需要的所有照片区域;

 然后解析div 里面所有的 img标签;

 然后解析 img 标签里面的 src 就是图片的下载连接;

 最后我们把下载连接放到迅雷,就可以批量下载了;

3. HTMLParser https://github.com/volodg/HTMLParser

原文地址:https://www.cnblogs.com/cocoajin/p/6922876.html