如何验证网页上是否存在超链接?

时间:2010-09-09 22:46:14

标签: c# .net regex parsing verification

我需要验证给定网页上是否存在特定的超链接。我知道如何下载源HTML。我需要帮助的是确定“源”网页中是否存在“目标”网址作为超链接。

这是一个用于演示问题的小程序控制台程序:

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!
}

注意最后一行的评论。我可以看到目标网址是否存在于源网址的HTML中,但我需要验证该网址是否在<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 个答案:

答案 0 :(得分:2)

最好的方法是使用带有内置DOM解析器的Web抓取库,它将使用HTML构建对象树,并允许您以编程方式探索您正在寻找的链接实体。有许多可用 - 例如Beautiful Soup(python)或scrapi(ruby)或Mechanize(perl)。对于.net,请尝试HTML敏捷包。 http://htmlagilitypack.codeplex.com/