2012-02-03 35 views
0

我正在編寫自己的C#4.0 WPF特定網絡爬蟲。目前我正在使用htmlagilitypack處理HTML文檔。檢查URL是否爲text/html或其他文件類型,如圖像

現在下面我下載

HtmlWeb hwWeb = new HtmlWeb(); 
hwWeb.UserAgent = lstAgents[GenerateRandomValue.GenerateRandomValueMin(irAgentsCount, 0)]; 
hwWeb.PreRequest = OnPreRequest; 
HtmlDocument hdMyDoc; 

hwWeb = new HtmlWeb 
       { 
        AutoDetectEncoding = false, 
        OverrideEncoding = Encoding.GetEncoding("iso-8859-9"), 
       }; 
hdMyDoc = hwWeb.Load(srPageUrl); 


     private static bool OnPreRequest(HttpWebRequest request) 
    { 
     request.AllowAutoRedirect = true; 
     return true; 
    } 

頁現在我的問題的方式是我希望能夠確定給定的URL是否爲text/html(抓取的內容)或圖像/ PDF只是其他類型。我怎樣才能做到這一點 ?

非常感謝您的回答。

C#4.0中,WPF應用程序

回答

5

而不是依靠HTMLAgilityPack下載它適合你,你可以用HttpWebRequest包含在HttpWebResponse,你可以檢查屬性下載頁面。這將允許您在嘗試解析內容之前執行您的檢查。

+1

+1。考慮首先使用HEAD請求,而不是GET。它會給你內容類型(如果服務器支持)。 – 2012-02-03 02:35:12

+0

這就是我要求的。如何獲取頭部請求的內容類型?我仍然可以用htmlagilitypack下載內容。 – MonsterMMORPG 2012-02-03 03:27:55

+0

@MonsterMMORPG - 我從來沒有直接使用HtmlAgilityPack(雖然基於API,我知道你可以通過一些Html來處理)。正如其他人所說,這似乎不可能直接與HtmlAgilityPack。使用'HtmlWebRequest'和'HtmlWebResponse',你可以使用內建的'ContentType'屬性來獲得內容類型。 – 2012-02-03 03:31:15

2

您想讀取響應頭中的內容類型。我不認爲這可以通過我的經驗與HtmlAgility包完成。

+0

這就是我問的問題。如何獲取頭部請求的內容類型?我仍然可以用htmlagilitypack下載內容。 – MonsterMMORPG 2012-02-03 03:28:06

1

我從來沒有使用html敏捷包,但我繼續前進,看着文檔。

我看到您將HtmlWeb對象上的PreRequest字段設置爲PreRequestHandler委託。還有一個PostResponse字段需要一個PostResponseHandler委託。看起來HtmlWeb對象會以HttpWebResponse對象的形式向服務器傳遞實際響應。

但是,當代碼中的代碼完成時,它看起來像敏捷包將繼續做它會做的任何事情。它遇到非HTML時是否會引發異常?您可能需要從PostResponse函數中拋出自己的異常,並在調用Load()時捕獲它。

正如我所說的,我沒有嘗試過這些。希望它能讓你開始朝着正確的方向前進。

+0

是的,它會拋出錯誤。 – MonsterMMORPG 2012-02-03 03:26:28

相關問題