资讯详情

iOS 解析 html

在iOS开发中,app通过分析数据的来源html。我通常用它hpple三方库,分析你想要的数据。以新浪股票的某个模块为例,简单展示hpple的使用。

查询了一下hpple版本信息,然后通过pod 将其集成到工程中。

网站链接的分析是https://finance.sina.com.cn/stock/,下面的红色框是分析中显示的内容。我们需要获得每个新闻的标题、时间和相应的细节链接。

3.1 下边的代码片段即为以上新闻对应的html 部分(html格式是一样的。为了避免代码片段太长,我删除了姚记扑克新闻后的四个内容。

<ul class="list04">     <li>         <span>17:39</span>         <p>             <a target="_blank" title="光洋股份股东表示减持不超过5.71% 此前11天10涨停" href="https://finance.sina.com.cn/stock/s/2018-11-22/doc-ihmutuec2669357.shtml">光洋股份股东表示减持不超过5.71% 此前11天10涨停</a>         </p>     </li>     <li>         <span>17:25</span>         <p>             <a target="_blank" title="银河承销首单救助私募债务 特瑞德控股股东4亿" href="https://finance.sina.com.cn/stock/s/2018-11-22/doc-ihpevhck1477054.shtml">银河承销首单救助私募债务 特瑞德控股股东4亿</a>         </p>     </li>     <li>         <span>16:20</span>         <p>             <a target="_blank" title="11月22日,上市公司晚上宣布快递" href="https://finance.sina.com.cn/stock/s/2018-11-22/doc-ihmutuec2643347.shtml">11月22日,上市公司晚上宣布快递</a>         </p>     </li>     <li>         <span>16:05</span>         <p>             <a target="_blank" title="苏常柴A:近日,江苏银行出售1000万股" href="https://finance.sina.com.cn/stock/s/2018-11-22/doc-ihpevhck1324957.shtml">苏常柴A:近日,江苏银行出售1000万股</a>         </p>     </li>     <li>         <span>16:00</span>         <p>             <a target="_blank" title="正业科技收关注函 要求利润分配计划等" href="https://finance.sina.com.cn/stock/s/2018-11-22/doc-ihpevhck1312223.shtml">正业科技收关注函 要求利润分配计划等</a>         </p>     </li>     <li>         <span>15:33</span>         <p>             <a target="_blank" title="15亿买微信公号失败后,15亿买微信公号,15亿买微信公号 华威文化实控人立即出售" href="https://finance.sina.com.cn/stock/s/2018-11-22/doc-ihmutuec2626264.shtml">15亿买微信公号失败后,15亿买微信公号,15亿买微信公号 华威文化实控人立即出售</a>         </p>     </li> </ul>

3.2 解析环节

// 股票新闻分析 - (void)parseStockNews {          // 根据链接获取相应的 NSData 数据     NSData *data = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:@"https://finance.sina.com.cn/stock/"]];          // 根据data创建TFHpple实例     TFHpple *doc = [[TFHpple alloc] initWithHTMLData:data];          // 根据标签进行过滤     NSArray *elements = [doc searchWithXPathQuery:@"//ul[@class='list04']"];          // 循环搜索子节点     for (int i = 0; i < elements.count; i  ) {                  // 获取单个ul节点         TFHppleElement *ulE = [elements objectAtIndex:i];                  // 查找该ul节点下面的名字是li的子节点         NSArray *liArr = [ulE childrenWithTagName:@"li"];                  // 遍历获得的一切li子节点         for (TFHppleElement *liE in liArr) {                          // 每个li时间信息             TFHppleElement *timeE = liE.firstChild;                          // 获取到时间             NSString *timeStr = [timeE text];                          // 查找lip节点在节点下方,因为只有一个p节点,我们取第一个p节点             TFHppleElement *pE = [[liE childrenWithTagName:@"p"] firstObject];                          // p节点有a子节点,所以我们得到a节点             TFHppleElement *aE = [[pE childrenWithTagName:@"a"] lastObject];                          // a节点的内容是 标题             NSString *titleStr = [aE text];                          // 根据a节点href属性,获取具体的新闻链接地址             NSString *urlStr = [aE objectForKey:@"href"];                          if (!timeStr || !timeStr || !urlStr || !titleStr) {                 continue;             }             NSLog(@"Stock News:\n时间:%@\n标题:%@\n链接:%@\n",timeStr,titleStr,urlStr);         }     } }

4. 总结

我个人感觉 hpple 真的很好用,但是在使用过程中要注意一些问题。

4.1有的html 节点内容或者属性值为空,这就会导致解析到的内容为空,针对这种情况,在解析的过程中,我们要对解析的结果进行相应的空判断,做到从数据源去除脏数据。

4.2有的html 格式不是很规范,所以在分析具体节点内容时,会导致阅读失败,进而导致crash问题。当然,如果是的话html 是从后台返回的数据,所以最好让后台标准化格式;如果是网页数据,只能自己测测判断发现问题,分析具体问题。

4.3 因为以上新闻内容随时间变化,要学会举一反三。

5. 我在demo 共分析了三个链接(包括以上链接),有兴趣可以查看。 Demo 地址https://github.com/coolpeng/HppleParseHtml

标签: 常柴高压共轨轨压传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

 锐单商城 - 一站式电子元器件采购平台  

 深圳锐单电子有限公司