C # HTMLAgilityPack неожиданно возвращает страницу с ошибкой 404 - PullRequest
0 голосов
/ 31 октября 2018

Я использую HTML Agility Pack для разбора веб-страниц, и до недавнего времени он работал отлично. Теперь, когда я пытаюсь загрузить страницу вместо полного ответа HTML, я получаю страницу с ошибкой 404.

Вот пример URL с таким поведением: http://bc.rcmp -grc.gc.ca / ViewPage.action? SiteNodeId = 2087 & languageId = 1 & contentId = 57000

А вот и код:

    public string Body(string uri)
    {
        var web = new HtmlWeb();
        web.UseCookies = true;
        var doc = web.Load(uri);
        if ((doc.ParseErrors.Count() > 0) || (web.StatusCode != HttpStatusCode.OK))
        {
             return string.Empty;
        }
        else 
        {
            return doc.DocumentNode
            .SelectNodes("//body")
            .First()
            .InnerHtml;
        }
    }

И вот что я получаю: Тело: мы не смогли найти эту ошибку веб-страницы 404 / nous ne pouvons trouver cette page web erreur 404 мы не смогли найти эту ошибку веб-страницы 404, мы сожалеем, что вы оказались здесь, иногда страница перемещается, но мы надеемся, что сможем помочь Вы нашли то, что искали. Возврат на главную страницу bc rcmp nous ne pouvons Trouver Cette Page web erreur 404 nous sommes désolés que vous ayez abulti ili il прибывают parfois qu'une page été déplacée ou supprimée heureusement nous pouvons vous owider que vous cherchez retournez à la grc en cb page d'accueil / ** /

Похоже, это может быть страница с ошибкой для этого конкретного сайта: http://bc.rcmp -grc.gc.ca / error.jsp

1 Ответ

0 голосов
/ 31 октября 2018
  • Вы уверены, что используете последнюю версию HtmlAgilityPack?
  • Возможно, вы слишком часто вызываете код, чтобы ваш ip-адрес был временно занесен в черный список?

Приведенный ниже код работает для меня, и bodyInnerHtml правильно назначен InnerHtml тела:

            string uri = "http://bc.rcmp-grc.gc.ca/ViewPage.action?siteNodeId=2087&languageId=1&contentId=57000";
            var web = new HtmlWeb();
            web.UseCookies = true;
            var doc = web.Load(uri);
            IEnumerable<HtmlParseError> d = doc.ParseErrors; // 6 errors, but so what

            if ( (web.StatusCode != HttpStatusCode.OK))
            {
            //    return string.Empty;
            }
            else
            {
               // works for me:
               var bodyInnerhtml = doc.DocumentNode.SelectNodes("//body")[0].InnerHtml;                            
            }

Результат: enter image description here

...