zoukankan      html  css  js  c++  java
  • 用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

  • 相关阅读:
    HDU3085 Nightmare Ⅱ (双向BFS)
    LuoguP2523 [HAOI2011]Problem c(概率DP)
    BZOJ4569 [Scoi2016]萌萌哒(并查集,倍增)
    CF360E Levko and Game(贪心)
    总结-小技巧
    总结-二分
    总结-莫队
    $P1821 [USACO07FEB]银牛派对Silver Cow Party$
    $P2126 Mzc家中的男家丁$
    $P5017 摆渡车$
  • 原文地址:https://www.cnblogs.com/cocoajin/p/6922876.html
Copyright © 2011-2022 走看看