Есть мысли о том, почему я не могу почистить сайт? - PullRequest
1 голос
/ 18 января 2010

Я создаю сайт, который должен собрать информацию с сайта партнера. Теперь мой очищающий код отлично работает с другими сайтами, но не с этим. Это обычный .html сайт. Я думаю, что это может быть сгенерировано как с php (сайт построен с php).

Я понятия не имею, я просто догадываюсь о сгенерированной части, и мне нужна ваша помощь профессионалов в этом. Если это имеет значение, вот мой код, который я использую. HtmlDocument - это htmlAgilityPack, но это не имеет к этому никакого отношения. Результат нулевой на сайте, который я пытаюсь.

        string result;
        var objRequest = System.Net.HttpWebRequest.Create(strUrl);
        var objResponse = objRequest.GetResponse();

        using (var sr = new StreamReader(objResponse.GetResponseStream()))
        {
            result = sr.ReadToEnd();
            sr.Close();

            var doc = new HtmlDocument();
            doc.LoadHtml(result);                

            foreach (var c in doc.DocumentNode.SelectNodes("//a[@href]"))
            {
                litStatus.Text += c.Attributes["href"].Value + "<br />";
            }
        }

EDIT:

это из валидатора w3, может быть что-то с этим?

Извините, я не могу проверить этот документ, потому что в строке 422 он содержал один или больше байтов, которые я не могу интерпретировать как utf-8 (другими словами, найденные байты недопустимы значения в указанной кодировке символов). Пожалуйста, проверьте содержимое файла и индикация кодировки символов.

Ошибка: utf8 "\ xA9" не сопоставляется с Unicode

Ответы [ 3 ]

2 голосов
/ 18 января 2010

Я бы начал с просмотра того, какой ответ я получил от чего-то простого, такого как wget, или с помощью инструмента, подобного http://www.fiddler2.com/fiddler2/">Fiddler, чтобы проверить ответ и проверить любые заголовки, которые вы получаете.

Иногда сайты возвращают разные ответыиз разных строк агента и т. д., поэтому вам может потребоваться настроить заголовки запросов и маскировать их под другой браузер для получения данных, которые вы ищете.Если вы используете Fiddler на той же машине, на которой выполняется сценарий, вы должны точно увидеть, что отличается между запросом страницы из вашего браузера и запросом страницы из вашего сценария.

Тамможет даже быть простым перенаправлением 302. или что-то подобное, что ваш код не следует.

Если вы можете получить доступ к странице через браузер, то вы определенно сможете получить к ней доступ, отправив точно такой жезапрос, как отправил бы ваш браузер.

Edit - Fiddler немного сложнее использовать из вашего собственного кода, потому что он ведет себя как прокси-сервер - он настраивается с обычными браузерами, но вам придется вручную сообщить свой кодзапустить через прокси на 127.0.0.1 порт 8888, чтобы Fiddler увидел ваши результаты.

1 голос
/ 18 января 2010

Проблема заключается в символе в комментарии в строке 421:

<!-- KalenderMx v1.4 � by shiba-design.de -->

вне заявленной кодировки iso-8859-1 :

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

Вы можете попробовать запустить проанализированную строку документа через фильтр в конвертировать или удалить нарушающие символы в строке перед оценкой с помощью htmlAgilityPack LoadHtml().

1 голос
/ 18 января 2010

Для устранения неполадок проверьте значение objResponse.StatusCode и objResponse.StatusDescription:

string result;
var objRequest = System.Net.HttpWebRequest.Create(strUrl);
var objResponse = (System.Net.HttpWebResponse) objRequest.GetResponse();

Console.WriteLine(objResponse.StatusCode);
Console.WriteLine(objResponse.StatusDescription);
...
...