利用C#語言構造一個Web程序
本文介紹如何用C#語言構造一個Web程序,它能夠把整個網站的內容下載到某個指定的目錄,程序的運行界面。你可以方便地利用本文提供的幾個核心類構造出自己的Web程序。
C#特別適合于構造Web程序,這是因為它已經內置了HTTP訪問和多線程的能力,而這兩種能力對于Web程序來說都是非常關鍵的。下面是構造一個Web程序要解決的關鍵問題:
1.HTML分析:需要某種HTML解析器來分析Web程序遇到的每一個頁面;
2.頁面處理:需要處理每一個下載得到的頁面。下載得到的內容可能要保存到磁盤,或者進一步分析處理;
3.多線程:只有擁有多線程能力,Web程序才能真正做到高效;
4.確定何時完成:不要小看這個問題,確定任務是否已經完成并不簡單,尤其是在多線程環境下。
HTML解析
C#語言本身不包含解析HTML的能力,但支持XML解析;不過,XML有著嚴格的語法,為XML設計的解析器對HTML來說根本沒用,因為HTML的語法要寬松得多。為此,我們需要自己設計一個HTML解析器。本文提供的解析器是高度獨立的,你可以方便地將它用于其它用C#處理HTML的場合。
本文提供的HTML解析器由ParseHTML類實現,使用非常方便:首先創建該類的一個實例,然后將它的Source屬性設置為要解析的HTML文檔:
- ParseHTML parse = new ParseHTML();
- parse.Source = "Hello World";
接下來就可以利用循環來檢查HTML文檔包含的所有文本和標記。通常,檢查過程可以從一個測試Eof方法的while循環開始:
- while(!parse.Eof())
- {
- char ch = parse.Parse();
Parse方法將返回HTML文檔包含的字符--它返回的內容只包含那些非HTML標記的字符,如果遇到了HTML標記,Parse方法將返回0值,表示現在遇到了一個HTML標記。遇到一個標記之后,我們可以用GetTag()方法來處理它。
- if(ch==0)
- {
- HTMLTag tag = parse.GetTag();
- }
一般地,Web程序最重要的任務之一就是找出各個HREF屬性,這可以借助C#的索引功能完成。例如,下面的代碼將提取出HREF屬性的值(如果存在的話)。
- Attribute href = tag["HREF"];
- string link = href.Value;
獲得Attribute對象之后,通過Attribute.Value可以得到該屬性的值。以上介紹利用C#語言構造一個Web程序
【編輯推薦】