【问题标题】:How to check if it is 404 error page(page does not exist) using HtmlAgilityPack如何使用 HtmlAgilityPack 检查是否是 404 错误页面(页面不存在)
【发布时间】:2016-01-09 14:22:49
【问题描述】:

在这里,我正在尝试读取 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();

【问题讨论】:

  • 您需要在查找图像之前检查响应状态。
  • @jdweng 有没有办法检查这个页面不存在的文档变量?

标签: c# html-agility-pack


【解决方案1】:

您需要在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;
    }
};

【讨论】:

    【解决方案2】:

    注意您使用的版本!

    我正在使用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;
        }
    };
    

    差别不大,但还是有的。

    希望这会为某人节省一些时间。

    【讨论】:

    • @jessehouwing,好点子!嗯,任何人都可以提出修改建议。直到现在我才注意到)谢谢!
    猜你喜欢
    • 2019-05-18
    • 2011-09-28
    • 2011-04-24
    • 2015-02-18
    • 1970-01-01
    • 2011-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多