天天看點

vs2010環境 c++ 使用htmlcxx解析html

因為最近在弄一個擷取課表的程式,課表的内容來自教務系統網站,是以需要解析html。然後我就在網上搜尋”c++解析html“,然後就找到了htmlcxx這個開源庫,下載下傳下來,發現不會使用它,然後又在網站上搜尋相關資料。最後找到一個部落格(http://www.cnblogs.com/zhanglanyun/),然後用email聯系了他,解決了問題,很感謝他!

接着說如何使用(作為參考,可能在别人的電腦上和我這有些差別):

1.下載下傳htmlcxx庫,我下的是tar.gz格式的,然後用解壓軟體将它解壓出來。

2.找到一個vs的工程檔案htmlcxx.vcproj(舊版本的vs工程),打開打,直接編譯可能會提示有一個錯誤(因為在我電腦裡出現了),錯誤指向了一個常字元指針(const char *),如下圖,然後隻需要把後面的引号删掉,重新打一次改為const char *signature = "\xEF\xBB\xBF"(感謝zaffix在評論中指出),再編譯,就可以成功編譯了。

vs2010環境 c++ 使用htmlcxx解析html

3.編譯完成之後,工程生成了一個lib靜态庫檔案。

4.但是這個庫下載下傳下來是不支援中文的,也就是說比如html中标簽裡含有中文,就會出錯(這是我在擷取源代碼時,因為擷取不完全,導緻程式出錯,才發現的)。如果出現了這個問題,可以檢視以下兩個部落格,裡面有解決方法。

http://my.oschina.net/leeeryan/blog/9914

http://blog.csdn.net/schoolers/article/details/6891061

5.然後在你的工程裡面設定vc的包含目錄和庫目錄,把htmlcxx檔案夾包含,然後庫目錄包含剛才生成的lib的檔案夾。另外,也可以将剛生成的lib拷貝到你的工程目錄下,用#pragma (lib, "xxxx.lib")加載靜态連結庫。

6.接着,在 工程屬性->c/c++->代碼生成 裡面将運作庫設定為/MTd。

這就可以使用了。

如何使用呢?

以控制台為例

1.#include <htmlcxx/html/ParserDom.h>

2. #include <htmlcxx/html/utils.h>

3.使用命名空間,using namespace htmlcxx

4.

HTML::ParserDom parser ;		//可以用來将html代碼轉換成dom樹
tree<HTML::Node> dom ;			//用來儲存html各個節點
tree<HTML::Node>::iterator iterator ;	//樹的疊代器

iterator = dom.begin () ;               //得到dom的第一個節點
iterator->tagName () ;                  //獲得節點的标簽名
iterator->parserAttributes () ;         //附上節點屬性
iterator->Attribute ("href").second ;   //此行執行需要上行,這相當于擷取标簽的href屬性,之是以有second,因為Attribute ("attributeName")傳回了一個pair
           

在部落格記錄一下,友善以後使用。若有說的不對的地方,歡迎指出。