iOS开发之html解析
使用XPath解析html
在项目中找到Header Search Paths,加入/usr/include/libxml2
NSString *urlString = nil;
urlString = @"http://www.xiyou.edu.cn/new/lm.jsp?urltype=tree.TreeTempUrl&wbtreeid=724";
NSData *htmlData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:urlString]];
NSData *toHtmlData = [self toUTF8:htmlData];
TFHpple *xpathParser = [[TFHpple alloc] initWithHTMLData:toHtmlData];
NSArray *aArray = [xpathParser searchWithXPathQuery:@"//a"];
if ([span count] > ) {
for (int i = ; i < ; i++) {
//从<a>的第82个开始取值,共获取15个值
TFHppleElement *aElement = [aArray objectAtIndex:i];
NSArray *aArr = [aElement children];
TFHppleElement *aEle = [aArr objectAtIndex:];
NSArray *aChild = [aEle children];
TFHppleElement *aChildEle = [aChild objectAtIndex:];
NSArray *aChildren = [aChildEle children];
NSString *aStr = [[aChildren objectAtIndex:] content];
NSLog(@"aStr:%@",aStr);
NSDictionary *aAttributeDict = [aElement attributes];
NSLog(@"aAttributeDict:%@",aAttributeDict);
//获取a中的属性值
NSString *hrefStr = [NSString stringWithFormat:@"http://www.xiyou.edu.cn%@",[aAttributeDict objectForKey:@"href"]];
NSLog(@"hrefStr:%@",hrefStr);
[currentNewsArr addObject:aStr];
[currentHrefArr addObject:hrefStr];
}
[htmlData release];
[xpathParser release];
}
//如果解析的网页不是utf8编码,如gbk编码,可以先将其转换为utf8编码再对其进行解析
-(NSData *) toUTF8:(NSData *)sourceData {
CFStringRef gbkStr = CFStringCreateWithBytes(NULL, [sourceData bytes], [sourceData length],kCFStringEncodingGB_18030_2000, false);
if (gbkStr == NULL) {
return nil;
} else {
NSString *gbkString = (NSString *)gbkStr;
//根据网页源代码中编码方式进行修改,此处为从gbk转换为utf8
NSString *utf8_String = [gbkString stringByReplacingOccurrencesOfString:@"META http-equiv="Content-Type" content="text/html; charset=GBK""
withString:@"META http-equiv="Content-Type" content="text/html; charset=UTF-""];
return [utf8_String dataUsingEncoding:NSUTF8StringEncoding];
}
}
http://blog.csdn.net/majiakun1/article/details/39472489
iOS开发之html解析的更多相关文章
- iOS开发之JSON解析
JSON解析步骤: - (NSArray *)products { if (_products == nil) { //第一步:获取JSON文件的路径: NSString *path = [[NSBu ...
- iOS开发之block解析
1. block的本质是一个Objective-C的对象,为什么这么说? 在Objective-C中,runtime会在执行时依据对象的isa指针的指向,来度额定这个对象的类型,也能够觉得一个对象,它 ...
- 李洪强iOS开发之iOS好文章收集
李洪强iOS开发之iOS好文章收集 该文收集朋友们转发或自己的写的技术文章,如果你也有相关的好文章,欢迎留言,当好文章多的时候,我会对这些好文章进行分门别类 文章 简述 日期 直播服务配置 使用 ng ...
- iOS开发之MVVM在项目中的应用
今天写这篇博客是想达到抛砖引玉的作用,想与大家交流一下思想,相互学习,博文中有不足之处还望大家批评指正.本篇博客的内容沿袭以往博客的风格,也是以干货为主,偶尔扯扯咸蛋(哈哈~不好好工作又开始发表博客啦 ...
- iOS开发之Socket通信实战--Request请求数据包编码模块
实际上在iOS很多应用开发中,大部分用的网络通信都是http/https协议,除非有特殊的需求会用到Socket网络协议进行网络数 据传输,这时候在iOS客户端就需要很好的第三方CocoaAsyncS ...
- iOS开发之UISearchBar初探
iOS开发之UISearchBar初探 UISearchBar也是iOS开发常用控件之一,点进去看看里面的属性barStyle.text.placeholder等等.但是这些属性显然不足矣满足我们的开 ...
- iOS开发之UIImage等比缩放
iOS开发之UIImage等比缩放 评论功能真不错 评论开通后,果然有很多人吐槽.谢谢大家的支持和关爱,如果有做的不到的地方,还请海涵.毕竟我一个人的力量是有限的,我会尽自己最大的努力大家准备一些干货 ...
- iOS开发之 Xcode6 添加xib文件,去掉storyboard的hello world应用
iOS开发之 Xcode6.1创建仅xib文件,无storyboard的hello world应用 由于Xcode6之后,默认创建storyboard而非xib文件,而作为初学,了解xib的加载原理 ...
- iOS开发之loadView、viewDidLoad及viewDidUnload的关系
iOS开发之loadView.viewDidLoad及viewDidUnload的关系 iOS开发之loadView.viewDidLoad及viewDidUnload的关系 标题中所说的3个方 ...
随机推荐
- Visual Studio 2013 Ultimate & IIS Express 8.0 错误 [iisexpress.exe”已退出,返回值为 -1073741816 (0xc0000008)] 解决方法
1. 开发环境 Visual Studio 2013 Ultimate IIS 8.0 Express 2. 错误信息 错误提示:iisexpress.exe”已退出,返回值为 -1073741816 ...
- Eclipse安卓项目导入android.support.design报错的解决办法
导入android.support.design出错:1.项目除了需要依赖appcompat_v7包外还要design包2.design包就是在安卓sdk下Extras中的android.suppor ...
- tp5---树形菜单
composer require bluem/tree
- session.资料
1. HttpSessionListener https://www.cnblogs.com/diewufeixian/p/4221747.html 2. 3. 4. 5.
- apollo各协议支持的客户端
apollo 源自 activemq,以快速.可靠著称,支持多协议:STOMP, AMQP, MQTT, Openwire, SSL, and WebSockets,下面就STOMP, AMQP, M ...
- JS书籍推荐
JS书籍推荐 一.总结 一句话总结: 二.JS进阶书籍 第一阶段:<JavaScript DOM编程艺术> 看这本书之前,请先确认您对Javascript有个基本的了解,应该知道if el ...
- Java 完美判断字符串中中文字符【中文符号】
package com.cmc.util; import java.util.regex.Pattern; public class CharUtil { public static void mai ...
- 十、dbms_shared_pool(提供了对共享池的一些过程和函数访问)
1.概述 作用:提供了对共享池的一些过程和函数访问,它使用户可以显示共享池中的对象尺寸,绑定对象到共享池,清除绑定到共享池的对象.为了使用该包,必须运行dbmspool.sql脚本来建立该包. 2.包 ...
- 【Seajs源码分析】3. 工具方法2
util-request.js 动态加载模块 /** * util-request.js - The utilities for requesting script and style files * ...
- 《Effective C++》第3章 资源管理(1)-读书笔记
章节回顾: <Effective C++>第1章 让自己习惯C++-读书笔记 <Effective C++>第2章 构造/析构/赋值运算(1)-读书笔记 <Effecti ...