最近刚好有一些小需求,就尝试用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