我需要验证给定网页上是否存在特定的超链接。我知道如何下载源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;
}
答案 0 :(得分:2)
最好的方法是使用带有内置DOM解析器的Web抓取库,它将使用HTML构建对象树,并允许您以编程方式探索您正在寻找的链接实体。有许多可用 - 例如Beautiful Soup(python)或scrapi(ruby)或Mechanize(perl)。对于.net,请尝试HTML敏捷包。 http://htmlagilitypack.codeplex.com/