手记

关于HTML文档解析中DOM树的构建猜测

这两年人工智能行业发展的比较火热,对于那些人工智能领域的大牛们,小编也是四十五度默默仰望。在好奇心的驱使下,小编也渐渐对人工智能产生了浓厚的兴趣,可怜前途是光明的道路是曲折的,小编的学习之旅可想而知,怎一个苦字了得,根本就是修行啊。在人工智能方面很多书籍都建议使用python语言,这可苦了作为小白的小编了,经历了好久终于学了点Python的基础。
在学习Python教程中涉及到了关于网络爬虫的内容,这让小编对网页结构的解析产生了好奇,HTML语言自身的结构很有其特点,在一个区域内会有成对的标识符出现,用以表示这段内容的起始和终止,并且其语法格式也限定了其不会出现交叉嵌套的情形。这种独特的网页结构特点,让我萌生了编写自己的网页解析程序的想法。终于进入正题了,原谅小编是个慢性子。。。
说干就干。首先问题来了,一个网页结构的文件,虽然层次比较清晰,但是如何让自己的程序能够识别出它的这种层次结构呢?这让小编困扰了好久。。。终于在word文档结构图的启示下,小编想起了好久没有碰过的数据结构中的树结构。查阅了资料发现HTML 文档有个重要的内容就是构建DOM树,网上浏览了一圈除了知道个DOM树名词外,其它的一堆内容小编实在是没有看明白。于是开始了小编的迷茫之旅。。。
自己动手,丰衣足食。经过了几天的思考,小编有了重大的突破。依据小编这些年的经验,一个程序最核心的是思想,其次就是它的开始——确定采用什么数据结构。经过几番猜想,小编选定了树与栈的结合。这种文档层次结构分级比较明显,很适合采用树形结构,配合进出栈的操作很容易得到层级关系。
希望就在前方,可是前方似乎总有未知在等你。方向确定了,小编有点窃喜,允许小编嘚瑟一下~小编智商还是杠杠的~哈哈哈~~~进入正题。门是开的,好像有个魔鬼。一旦你作了决定,恭喜你,麻烦就会缠身。HTML结构虽然很清晰,但是,每个层的元素组成个数却是未知的,这从某种程度上加大了控制的难度。小编又进入苦恼中。。。谁来安慰一下刚刚中了五百万的却发现自己原来在做梦的小心脏。请求高手解答。。。对不起你所拨打的电话是空号!!!还是靠自己吧。。。小编从脑海中回想自己所学的几种结构,心中暗自庆幸还好没有全部还给老师。。。嘿嘿。。。从线性表中的栈、队列、链表到二叉树,再到图中的邻接多重表。盘算了一圈,感觉邻接多重表比较靠谱,经过几番痛苦的假设,终于还是放弃了。
既然是树结构还是老老实实的用树吧,经过几番的分析,小编终于找到了一种解决方案,采用child-root-cousin二叉树形结构,可以比较好的解决下层节点数量不定的问题。事情到了这里终于可以有一个比较好的解决方案了。小编可以好好休息一下了。

时间:2017.3.30-- 00:41

继续我们的DOM树的构建之旅。方案有了,下面就该亲自动手了堆代码了。不用多说对于小编这个小白就会点C语言,虽然学了Python但是还不能得心应手,不要笑小编好low,小编会害羞的~~~。
对于小编这种小白,C程序也就马马虎虎了,就不丢人现眼了。经过几番测试终于写好了一个栈的基本程序结构,然后就开始child-root-cousin树的构建,代码就不贴了,相信有点数据结构基础的,都比小编强。以下是小编的栈结构体和child-root-cousin二叉树结构体:
控制栈结构体:
typedef struct Element{
Node node;
struct Element
next;
}Element;
struct Stack{
Element top, base;
int length;
};
Child-root-cousin二叉树节点结构体:
typedef struct Node{
int data;
struct Node parent;
struct Node
cousin;
struct Node * child;
int child_num;
}Node;
因为HTML结构比较分明,而且HTML文件的解析涉及到很多的对象不是问题研究的重点,所以小编测试的时候就偷了个懒,采用一个整形数组,类似这种结构{1,2,3,-3,4,-4,-2,5,-5,-1}表示HTML文件,个人感觉还是挺能说明问题的。
以上对于HTML文档中DOM树的构建是小编的个人猜测,至于HTML真是的结构小编就不太清楚了,如有知道详情的亲们,麻烦分享一下,让我等小白好好拜读。

时间:2017.3.30 --01:03

0人推荐
随时随地看视频
慕课网APP