用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 来确 ...
随机推荐
- pytest六:parametrize-参数化
pytest.mark.parametrize 装饰器可以实现测试用例参数化. 1.这里是一个实现检查一定的输入和期望输出测试功能的典型例子 import pytest @pytest.mark.pa ...
- 解决Delphi7的自带的UTF-8编码转换函数BUG
Delphi7及其以下版本的 VCL 只支持 Ansi, 所以... WideString 与 UTF8String (定义与 AnsiString 相同) 并没有办法正确的在 VCL 中显示 Del ...
- POJ 1995 Raising Modulo Numbers (快速幂)
题意: 思路: 对于每个幂次方,将幂指数的二进制形式表示,从右到左移位,每次底数自乘,循环内每步取模. #include <cstdio> typedef long long LL; LL ...
- [转]oracle10客户端PL/SQL Developer如何连接远程服务器上的oracle数据库
时间:2013年8月21日 前提条件:假设你已经安装好了oracle和PL/SQL Developer,知道远程服务器的IP和数据库端口,知道远程服务器上的oracle数据库名和密码 如何用PL/SQ ...
- 020 Spark中分组后的TopN,以及Spark的优化(重点)
一:准备 1.源数据 2.上传数据 二:TopN程序编码 1.程序 package com.ibeifeng.bigdata.spark.core import java.util.concurren ...
- 关于make: *** No rule to make target `clean'. Stop.这个莫名其妙问题的解决方法
执行make编译命令总报错,后来试试make clean命令也不行,报下面的错. make: *** No rule to make target `clean'. Stop. 真是莫名其妙的错误, ...
- 为什么macos开机黑屏但是有声音?
一般使用时间久了,或者升级系统就会出现这个情况.完全关机,然后按开机键,再按command+option+R+P.不要松手,等重启几次,响几次(3次左右).然后松手等它自己重启即可. mac开机黑 ...
- poj 1579 Function Run Fun 【记忆化递归】
<题目链接> 题目大意: 给出一些递归式,直接套用这些递归式计算. 解题分析: 递归式已经由题目明确说明了,但是无脑递归铁定超时,所以此时,我们需要加上记忆化,对于那些已经算过的,就没有必 ...
- iOS11开发教程(二十三)iOS11应用视图实现按钮的响应(3)
iOS11开发教程(二十三)iOS11应用视图实现按钮的响应(3) 2.使用代码添加按钮实现的响应 使用代码添加的按钮,实现响应需要使用到addTarget(_:action:for:)方法,其语法形 ...
- 51nod 1277 字符串中的最大值
题目链接 51nod 1277 字符串中的最大值 题解 对于单串,考虑多串的fail树,发现next数组的关系形成树形结构 建出next树,对于每一个前缀,他出现的次数就是他子树的大小 代码 #inc ...