1

我需要验证给定网页上是否存在特定的超链接。我知道如何下载源 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!
}

注意最后一行的注释。我可以查看目标 URL 是否存在于源 URL 的 HTML 中,但我需要验证 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;
    }
4

1 回答 1

2

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

于 2010-09-09T22:58:59.320 回答