美文网首页OC技术iOS进阶指南iOS程序猿
使用AFNetworking获取网页数据

使用AFNetworking获取网页数据

作者: 桃花流水鳜鱼肥 | 来源:发表于2016-09-02 15:33 被阅读850次

最近用AFNetworking获取XML格式的数据,然后我就尝试着获取网页上的数据。

实例:获取简书首页文章列表

    NSString *url = [NSString stringWithFormat:@"http://www.jianshu.com"];
    
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    [manager.responseSerializer setAcceptableContentTypes:[NSSet setWithObjects:@"text/html", nil]];
    [manager GET:url parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        
        NSError *error;
        ONOXMLDocument *document = [ONOXMLDocument HTMLDocumentWithData:responseObject error:&error];
        [document enumerateElementsWithXPath:@"//*[@class='article-list thumbnails']/li[@class='have-img']/div/h4" usingBlock:^(ONOXMLElement *element, NSUInteger idx, BOOL *stop) {
            NSLog(@"Element:%@",[element stringValue]);
        }];
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSLog(@"%@",[error localizedDescription]);
    }];

结果:


XPath介绍

XPath是一门在XML中查找信息的语言。XPath用于在XML文档中通过元素和属性进行导航。
网页的HTML元素可以通过『查看页面源码』查看,如:


XPath通过『路径表达式』来选择节点。基本用法:更多用法

相对路径

[document firstChildWithXPath:@"//book/title[@lang='en']"];

结果:
<title lang="en">Harry Potter</title>

说明:返回第一个符合『//』后面那个匹配的元素。相对路径可以实现精准定位,不需要从根部一层层到需要的元素。

绝对路径:

id cusotom = [document firstChildWithXPath:@"/html/body"];

说明:绝对路径是从网页的起始标签一直定位对应标签的方式。这种方式路径会很长,不好用。

注意:
有的时候我们按照上面的路径表达式,会发生不能访问某些节点的情况。
比如访问下面红框里的内容:

id cusotom = [document firstChildWithXPath:@"//body/div[@id='Wrapper']/div[@class='content']/div[@class='Main']"];

结果:
nil

原因说明:
我明明是按照xpath规则一层层访问的,为什么结果为nil呢?
原来这些属性是动态变化,比如是用JS动态形成的页面,那么这些属性在每次加载的时候都是不一样的。

那么这种情况我怎么获取比如『cell item』的数据呢?
解决办法:直接跳过这些路径访问他下面的路径:

id cusotom = [document firstChildWithXPath:@"//body/div[@id='Wrapper']/div[@class='content']/div[@class='box']/div[@class='cell item']"];

怎么确定那些属性是动态形成的?暂时我也不知道,我只能一层一层的试。

相关文章

  • 使用AFNetworking获取网页数据

    最近用AFNetworking获取XML格式的数据,然后我就尝试着获取网页上的数据。 实例:获取简书首页文章列表 ...

  • AFNetworking3.0

    AFNetworking获取数据 AFNetworking是对NSURLConnection,NSURLSessi...

  • iOS使用AFNetworking请求数据进行GBK编码(OC和

    使用AFNetworking请求数据如果网页的数据是gbk类型的话,用UTF8转换的话,结果会是nil,这个时候我...

  • 爬虫解析器

    我们可以先用requests.get获取网页源码()或selenium自动测试网页,获取到数据之后,我们在使用xp...

  • day72-mongodb数据库的使用

    1使用post请求爬取数据 当网页中的数据不是以get请求获取到的时候,就需要使用post请求去获取数据。 ses...

  • Kettle (5) - 获取 Web 数据

    使用 Kettle 获取网页数据。当然,这里的网页数据主要指结构化数据,可能是 xml 格式、json 格式 或者...

  • 外行学 Python 爬虫 第五篇 数据存储

    前面一至四篇我们学习了如何使用 python 来获取网页并将网页中的有效数据解析出来,当获取到有效数据以后,不可能...

  • xpath语法

    python爬去网页数据时,如果使用requests库和xpath,首先需要使用lxml的etree将获取的网页数...

  • Python数据分析基础:网页数据获取

    本篇介绍使用 python 获取网页数据的方法,要爬取 51job Python 职位的招聘信息。在获取数据上,...

  • JSON数据获取和解析

    AFNetWorking对网络数据post请求获取数据步骤 1.创建“AFHTTPRequestOperation...

网友评论

  • RBNote:ONOXMLDocument 请问这个类在哪个头文件中
    RBNote:知道了 pod Ono

本文标题:使用AFNetworking获取网页数据

本文链接:https://www.haomeiwen.com/subject/zibhettx.html