Как проверить, что гиперссылка существует на веб-странице? - PullRequest
1 голос
/ 10 сентября 2010

Мне нужно проверить, существует ли конкретная гиперссылка на данной веб-странице. Я знаю, как скачать исходный HTML. Мне нужна помощь, чтобы выяснить, существует ли «целевой» URL в виде гиперссылки на «исходной» веб-странице.

Вот небольшая консольная программа для демонстрации проблемы:

public static void Main()
{
    var sourceUrl = "http://developer.yahoo.com/search/web/V1/webSearch.html";
    var targetUrl = "http://developer.yahoo.com/ypatterns/";
    Console.WriteLine("Source contains link to target? Answer = {0}",
                      SourceContainsLinkToTarget(
                          sourceUrl,
                          targetUrl));
    Console.ReadKey();
}

private static bool SourceContainsLinkToTarget(string sourceUrl, string targetUrl)
{
    string content;
    using (var wc = new WebClient())
        content = wc.DownloadString(sourceUrl);
    return content.Contains(targetUrl); // Need to ensure this is in a <href> tag!
}

Обратите внимание на комментарий в последней строке. Я могу видеть, существует ли целевой URL-адрес в HTML-адресе исходного URL-адреса, но мне нужно убедиться, что URL-адрес находится внутри тега <href/>. Таким образом, я могу подтвердить, что это на самом деле гиперссылка, а не просто текст.

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

Спасибо!


Вот решение с использованием пакета HtmlAgilityPack:

   private static bool SourceContainsLinkToTarget(string sourceUrl, string targetUrl)
    {
        var doc = (new HtmlWeb()).Load(sourceUrl);
        foreach (var link in doc.DocumentNode.SelectNodes("//a[@href]"))
            if (link.GetAttributeValue("href",
                                       string.Empty).Equals(targetUrl))
                return true;
        return false;
    }

1 Ответ

2 голосов
/ 10 сентября 2010

Лучший способ - это использовать веб-библиотеку со встроенным синтаксическим анализатором DOM, который создаст дерево объектов из HTML и позволит вам исследовать его программно для объекта ссылки, который вы ищете. Есть много доступных - например, Beautiful Soup (python) или scrapi (ruby) или Mechanize (perl). Для .net попробуйте пакет гибкости HTML. http://htmlagilitypack.codeplex.com/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...