1

特定のハイパーリンクが特定のWebページに存在することを確認する必要があります。ソースHTMLをダウンロードする方法を知っています。私が助けを必要としているのは、「ターゲット」URLが「ソース」Webページにハイパーリンクとして存在するかどうかを把握することです。

問題を示すための小さなコンソールプログラムを次に示します。

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 に答える