用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:];
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:];
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
用oc写爬虫之HTMLParser的更多相关文章
- 手把手教你用.NET Core写爬虫
写在前面 自从上一个项目58HouseSearch从.NET迁移到.NET core之后,磕磕碰碰磨蹭了一个月才正式上线到新版本. 然后最近又开了个新坑,搞了个Dy2018Crawler用来爬dy20 ...
- 让你从零开始学会写爬虫的5个教程(Python)
写爬虫总是非常吸引IT学习者,毕竟光听起来就很酷炫极客,我也知道很多人学完基础知识之后,第一个项目开发就是自己写一个爬虫玩玩. 其实懂了之后,写个爬虫脚本是很简单的,但是对于新手来说却并不是那么容易. ...
- [Python]新手写爬虫全过程(已完成)
今天早上起来,第一件事情就是理一理今天该做的事情,瞬间get到任务,写一个只用python字符串内建函数的爬虫,定义为v1.0,开发中的版本号定义为v0.x.数据存放?这个是一个练手的玩具,就写在tx ...
- scrapy写爬虫是出现no module named win32api错误
windows下利用scrapy(python2.7)写爬虫,运行 scrapy crawl dmoz 命令时提示:exceptions.ImportError: No module named wi ...
- PHP, Python, Node.js 哪个比较适合写爬虫?
PHP, Python, Node.js 哪个比较适合写爬虫? 1.对页面的解析能力2.对数据库的操作能力(mysql)3.爬取效率4.代码量推荐语言时说明所需类库或者框架,谢谢.比如:python+ ...
- [Python]新手写爬虫全过程(转)
今天早上起来,第一件事情就是理一理今天该做的事情,瞬间get到任务,写一个只用python字符串内建函数的爬虫,定义为v1.0,开发中的版本号定义为v0.x.数据存放?这个是一个练手的玩具,就写在tx ...
- 怎么用Python写爬虫抓取网页数据
机器学习首先面临的一个问题就是准备数据,数据的来源大概有这么几种:公司积累数据,购买,交换,政府机构及企业公开的数据,通过爬虫从网上抓取.本篇介绍怎么写一个爬虫从网上抓取公开的数据. 很多语言都可以写 ...
- python写爬虫时的编码问题解决方案
在使用Python写爬虫的时候,常常会遇到各种令人抓狂的编码错误问题.下面给出一些简单的解决编码错误问题的思路,希望对大家有所帮助. 首先,打开你要爬取的网站,右击查看源码,查看它指定的编码是什么,如 ...
- 用c+libcurl+PCRE写爬虫2--好用的正则表达式
写爬虫最重要的就是正则表达式的处理(爬出来的数据的筛选,清洗,过滤等操作). 通过一篇文章 http://blog.csdn.net/quaful/article/details/6460880 来确 ...
随机推荐
- SQLite Manager插件安装与使用(firefox)
下载与安装: FireFox 插件:SQLite Manager可以管理你电脑上的任何 SQLite数据库.一个直观的目录树状来展示数据库的对象.通过提示对话来管理表.索引.视图和触发器.你能浏览和搜 ...
- ubuntu下java8卸载
要删除 OpenJDK (如果已安装的话).首先,检查是安装的哪个 OpenJDK包. # dpkg --list | grep -i jdk 移除 openjdk包: # apt-get purge ...
- 《剑指offer》-旋转数组的最小数字
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数 ...
- SqlServer基础语法(三)
1.数据库备份的方法: 完整数据库备份GPOSDB 文件大小:23MB 日志备份 GPOSDB日志备份文件大小:211KB --完整备份 Backup DATABASE GPOSDB To disk= ...
- hdu 4707 仓鼠 记录深度 (BFS)
题意:linji的仓鼠丢了,他要找回仓鼠,他在房间0放了一块奶酪,按照抓鼠手册所说,这块奶酪可以吸引距离它D的仓鼠,但是仓鼠还是没有出现,现在给出一张关系图,表示各个房间的关系,相邻房间距离为1,而且 ...
- Spring之配置文件bean作用域的详细介绍
Spring的配置文件applicationContext.xml中bean作用域的详细介绍: 1:对象的创建:单例和多例 scope="singleton",默认值 ...
- day9--队列queue
queue队列 Queue是python标准库中的线程安全的队列(FIFO)实现,提供了一个适用于多线程编程的先进先出的数据结构,即队列,用来在生产者和消费者线程之间的信息传递.一个线程放入数据,另外 ...
- python函数式编程——匿名函数(lambda)
匿名函数lambda lambda x:x*x x就是参数 相当于函数 def f(x): return x*x 匿名函数可以作为函数对象赋值给变量: >>> f = lambda ...
- MT4编程初级手册
http://www.fxunion.com/college/2015/17554.html
- Kettle学习之Spoon简单使用
kettle学习之Spoon使用 2018-08-04 10:40:01 首先介绍两个博客入门: https://blog.csdn.net/zzq900503/article/details/785 ...