处理复杂网页结构内容时用正则提取数据不太方便,试用了下
hpple感觉不错,支持xpath,配合firefox下xPather插件使用绝对给力。
不过当前版本的hpple有几个小BUG,使用时需要注意一下。对objective-c不熟悉,调试了一大半天才搞定,记录下来给后来人节约时间。
参见官方的列子试着处理下面两个代码片段试试:
问题一:
<!-- e = div, 使用[e content]方法只返回"2" -->
<html>
<body>
<div>
1
<br/>
2
</div>
</body>
</html>
解决方法:
XPathQuery.m中DictionaryForNode方法在递归合并内容时,没有判断是否已经有内容,直接用最后一个text节点值覆盖了。先判断一下是否存在,存在则追加内容即可。
问题二:
<!-- e = div, 使用[e content]方法只返回空值 -->
<html>
<body>
<div>
<span><span>hello world</span></span>
</div>
</body>
</html>
解决方法:
TFHppleElement.m中- (NSString *) content方法只读取了本身元素的内容,存在嵌套元素时,不能取出正确的内容。递归合并下子元素的值返回即可。