[英]How to check if it is 404 error page and do something using HtmlAgilityPack
[英]How to check if it is 404 error page(page does not exist) using HtmlAgilityPack
在這里,我試圖閱讀網址並在頁面中獲取圖像。 我需要排除頁面,如果它是404並停止從404錯誤頁面獲取圖像。 如何使用HtmlAgilityPack? 這是我的代碼
var document = new HtmlWeb().Load(completeurl);
var urls = document.DocumentNode.Descendants("img")
.Select(e => e.GetAttributeValue("src", null))
.Where(s => !String.IsNullOrEmpty(s)).ToList();
您需要在HtmlWeb
實例上注冊PostRequestHandler
事件,它將在每個下載的文檔之后引發,您將可以訪問HttpWebResponse
對象。 它具有StatusCode
的屬性。
HtmlWeb web = new HtmlWeb();
HttpStatusCode statusCode = HttpStatusCode.OK;
web.PostRequestHandler += (request, response) =>
{
if (response != null)
{
statusCode = response.StatusCode;
}
}
var doc = web.Load(completeUrl)
if (statusCode == HttpStatusCode.OK)
{
// received a read document
}
查看GutHub上HtmlAgilityPack的代碼,它甚至更簡單, HtmlWeb
有一個屬性StatusCode
,其值設置為:
var web = new HtmlWeb();
var document = web.Load(completeurl);
if (web.StatusCode == HttpStatusCode.OK)
{
var urls = document.DocumentNode.Descendants("img")
.Select(e => e.GetAttributeValue("src", null))
.Where(s => !String.IsNullOrEmpty(s)).ToList();
}
AgilityPack API已有更新。 訣竅仍然是一樣的:
var htmlWeb = new HtmlWeb();
var lastStatusCode = HttpStatusCode.OK;
htmlWeb.PostResponse = (request, response) =>
{
if (response != null)
{
lastStatusCode = response.StatusCode;
}
};
請注意您使用的版本!
我正在使用HtmlAgilityPack v1.5.1
並且沒有PostRequestHandler
事件。
在v1.5.1
中,必須使用PostResponse
字段。 見下面的例子。
var htmlWeb = new HtmlWeb();
var lastStatusCode = HttpStatusCode.OK;
htmlWeb.PostResponse = (request, response) =>
{
if (response != null)
{
lastStatusCode = response.StatusCode;
}
};
差異不大但仍然存在差異。
希望這會節省一些時間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.