最近刚好有一些小需求,就尝试用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的更多相关文章

  1. 手把手教你用.NET Core写爬虫

    写在前面 自从上一个项目58HouseSearch从.NET迁移到.NET core之后,磕磕碰碰磨蹭了一个月才正式上线到新版本. 然后最近又开了个新坑,搞了个Dy2018Crawler用来爬dy20 ...

  2. 让你从零开始学会写爬虫的5个教程(Python)

    写爬虫总是非常吸引IT学习者,毕竟光听起来就很酷炫极客,我也知道很多人学完基础知识之后,第一个项目开发就是自己写一个爬虫玩玩. 其实懂了之后,写个爬虫脚本是很简单的,但是对于新手来说却并不是那么容易. ...

  3. [Python]新手写爬虫全过程(已完成)

    今天早上起来,第一件事情就是理一理今天该做的事情,瞬间get到任务,写一个只用python字符串内建函数的爬虫,定义为v1.0,开发中的版本号定义为v0.x.数据存放?这个是一个练手的玩具,就写在tx ...

  4. scrapy写爬虫是出现no module named win32api错误

    windows下利用scrapy(python2.7)写爬虫,运行 scrapy crawl dmoz 命令时提示:exceptions.ImportError: No module named wi ...

  5. PHP, Python, Node.js 哪个比较适合写爬虫?

    PHP, Python, Node.js 哪个比较适合写爬虫? 1.对页面的解析能力2.对数据库的操作能力(mysql)3.爬取效率4.代码量推荐语言时说明所需类库或者框架,谢谢.比如:python+ ...

  6. [Python]新手写爬虫全过程(转)

    今天早上起来,第一件事情就是理一理今天该做的事情,瞬间get到任务,写一个只用python字符串内建函数的爬虫,定义为v1.0,开发中的版本号定义为v0.x.数据存放?这个是一个练手的玩具,就写在tx ...

  7. 怎么用Python写爬虫抓取网页数据

    机器学习首先面临的一个问题就是准备数据,数据的来源大概有这么几种:公司积累数据,购买,交换,政府机构及企业公开的数据,通过爬虫从网上抓取.本篇介绍怎么写一个爬虫从网上抓取公开的数据. 很多语言都可以写 ...

  8. python写爬虫时的编码问题解决方案

    在使用Python写爬虫的时候,常常会遇到各种令人抓狂的编码错误问题.下面给出一些简单的解决编码错误问题的思路,希望对大家有所帮助. 首先,打开你要爬取的网站,右击查看源码,查看它指定的编码是什么,如 ...

  9. 用c+libcurl+PCRE写爬虫2--好用的正则表达式

    写爬虫最重要的就是正则表达式的处理(爬出来的数据的筛选,清洗,过滤等操作). 通过一篇文章 http://blog.csdn.net/quaful/article/details/6460880 来确 ...

随机推荐

  1. pytest六:parametrize-参数化

    pytest.mark.parametrize 装饰器可以实现测试用例参数化. 1.这里是一个实现检查一定的输入和期望输出测试功能的典型例子 import pytest @pytest.mark.pa ...

  2. 解决Delphi7的自带的UTF-8编码转换函数BUG

    Delphi7及其以下版本的 VCL 只支持 Ansi, 所以... WideString 与 UTF8String (定义与 AnsiString 相同) 并没有办法正确的在 VCL 中显示 Del ...

  3. POJ 1995 Raising Modulo Numbers (快速幂)

    题意: 思路: 对于每个幂次方,将幂指数的二进制形式表示,从右到左移位,每次底数自乘,循环内每步取模. #include <cstdio> typedef long long LL; LL ...

  4. [转]oracle10客户端PL/SQL Developer如何连接远程服务器上的oracle数据库

    时间:2013年8月21日 前提条件:假设你已经安装好了oracle和PL/SQL Developer,知道远程服务器的IP和数据库端口,知道远程服务器上的oracle数据库名和密码 如何用PL/SQ ...

  5. 020 Spark中分组后的TopN,以及Spark的优化(重点)

    一:准备 1.源数据 2.上传数据 二:TopN程序编码 1.程序 package com.ibeifeng.bigdata.spark.core import java.util.concurren ...

  6. 关于make: *** No rule to make target `clean'. Stop.这个莫名其妙问题的解决方法

    执行make编译命令总报错,后来试试make clean命令也不行,报下面的错. make: *** No rule to make target `clean'.  Stop. 真是莫名其妙的错误, ...

  7. 为什么macos开机黑屏但是有声音?

    一般使用时间久了,或者升级系统就会出现这个情况.完全关机,然后按开机键,再按command+option+R+P.不要松手,等重启几次,响几次(3次左右).然后松手等它自己重启即可.   mac开机黑 ...

  8. poj 1579 Function Run Fun 【记忆化递归】

    <题目链接> 题目大意: 给出一些递归式,直接套用这些递归式计算. 解题分析: 递归式已经由题目明确说明了,但是无脑递归铁定超时,所以此时,我们需要加上记忆化,对于那些已经算过的,就没有必 ...

  9. iOS11开发教程(二十三)iOS11应用视图实现按钮的响应(3)

    iOS11开发教程(二十三)iOS11应用视图实现按钮的响应(3) 2.使用代码添加按钮实现的响应 使用代码添加的按钮,实现响应需要使用到addTarget(_:action:for:)方法,其语法形 ...

  10. 51nod 1277 字符串中的最大值

    题目链接 51nod 1277 字符串中的最大值 题解 对于单串,考虑多串的fail树,发现next数组的关系形成树形结构 建出next树,对于每一个前缀,他出现的次数就是他子树的大小 代码 #inc ...