百度空间 | 百度首页 
 
查看文章
 
(2007-7-10)NekoHtml,想说爱你很难啊。
2007-07-10 17:33

开源的Html解析程序中,NekoHtml是号称最好的一个。可是,它距离真正的浏览器的实现还有些距离。主要的问题是它提供的tag-banlance功能。本来呢,有这个功能比没有这个功能是要好很多的,只是遇到了中国这样的国家,必须面对乱七八糟的各种网页,于是,它就不怎么适用了。以下是一个简单的例子:

<head>
     <div>haha</div>
     <title>bad page</title>
</head>

经过NekoHtml的解析,会变成:
<html>
<head></head>
<body>
     <div>haha</div>
     <title>bad page</title>
</body>
</html>

可是,标准的IE(ff)解析应该为:
<html>
<head>
     <title>bad page</title>
</head>
<body>
     <div>haha</div>
</body>
</html>

更麻烦的问题是无法直接在NekoHtml上面进行任何修改,看来必须在下一层自己进行balance才行了。
NekoHtml处理banlance的某些策略值得借鉴,比如,某个标签可以属于哪个标签等等(这些都来自于html标准)。似乎有点灵感了。写上几句:
1,当节点不能够和其父亲满足属于关系的时候:
     a) 节点可以属于父亲的父亲,那么,把节点变成父亲的前一个兄弟;实例:<table>a</table>;
     b) 节点可以属于父亲的前一个或者后一个兄弟,那么,把节点变成父亲节点兄弟的最后一个孩子(或者第一个孩子);实例:<head><div>a</div></head><body></body>;

等需要的时候再改进。另外,鄙视zhuaxia.com的开发团队,因为它们的页面实在是乱七八糟的太厉害了。


类别:天天日记 | 添加到搜藏 | 浏览() | 评论 (3)
 
最近读者:
 
网友评论:
1
2007-07-11 08:55 | 回复
使用nodepad把文本保存为utf-8的编码后,会有个不大不小的问题:你无法用java直接读取到完全一致的文本。 你会发现,用java读取出来之后,第一个字符是不可显示的,其余字符都是一致的。就这一个字符就能够导致很大的问题,特别是在NekoHtml进行tags的balance的时候,它可能会出现2种不同的解析方法。 这种事情应该概率不是很高的(毕竟大部分时候解析的结果还是一样的,因为只是第一个字符不同而已),刚好,不幸的被我遇到了。特记载在这里,以免兄弟们遇到。
 
2
2007-07-11 09:15 | 回复
又发现很多网站没有html标签,看来balance是必须的,只是可能需要自己来构建一个更加强大的balance才好。 NekoHtml是边构建边balance的,这个可能不满足实际的balance的构建步骤,不过,我们可以在构建之后进行balance,效果应该更好的。
 
3
2007-08-15 18:02 | 回复
html解析是为了提取链接,如果这方面有难度可以先放一放,由人工或半人工提供链接,我觉得最大的难点可能还在索引库的动态维护, 因为每天都有抓取新信息,又要删除过期的、无效的信息,于是索引库就要面对频繁增加、删除,改变等操作。
 
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2009 Baidu