關於HTML文件解析中DOM樹的構建猜測

mug發表於2021-09-09

這兩年人工智慧行業發展的比較火熱,對於那些人工智慧領域的大牛們,小編也是四十五度默默仰望。在好奇心的驅使下,小編也漸漸對人工智慧產生了濃厚的興趣,可憐前途是光明的道路是曲折的,小編的學習之旅可想而知,怎一個苦字了得,根本就是修行啊。在人工智慧方面很多書籍都建議使用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

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/506/viewspace-2798570/,如需轉載,請註明出處,否則將追究法律責任。

相關文章