如何使用HtmlAgilityPack检查是否为404错误页面(页面不存在)
本文关键字:不存在 错误 HtmlAgilityPack 何使用 检查 是否 | 更新日期: 2023-09-27 18:29:34
这里我正在尝试读取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;
}
};
差别不大,但仍然存在。
希望这能为某人节省一些时间。