如何使用HtmlAgilityPack检查它是否是404错误页面(页面不存在)
How to check if it is 404 error page(page does not exist) using HtmlAgilityPack
我在这里尝试读取 url 并获取页面中的图像。如果它是 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
}
查看GitHub上的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;
}
};
差别不大,但还是有。
希望这会为某人节省一些时间。
我在这里尝试读取 url 并获取页面中的图像。如果它是 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
}
查看GitHub上的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;
}
};
差别不大,但还是有。
希望这会为某人节省一些时间。