Мне нужно проверить, существует ли конкретная гиперссылка на данной веб-странице. Я знаю, как скачать исходный 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;
}