0

これは、リンクを取得するためのコードです。

private List<string> getLinks(HtmlAgilityPack.HtmlDocument document)
        {

            List<string> mainLinks = new List<string>();
            var linkNodes = document.DocumentNode.SelectNodes("//a[@href]");
            if (linkNodes != null)
            {
                foreach (HtmlNode link in linkNodes)
                {
                    var href = link.Attributes["href"].Value;
                    mainLinks.Add(href);
                }
            }
            return mainLinks;

        }

時々、取得しているリンクは「/」または:のように始まります。

"/ videos?feature=mh"または"//www.youtube.com/my_videos_upload"

「/」が適切なサイトを意味するのか、「/ videos?...」または「//www.youtube..。」で始まるサイトを意味するのかわかりません。

httpまたはhttpsで始まるWebサイトからのリンクを取得する必要があります。おそらく、wwwだけでも適切なサイトとしてカウントされます。問題は、私が適切なサイトアドレスとリンクとして定義するものとそうでないものです。

私のgetLinks関数が良くないことは確かですが、コードは適切な方法ではありません。

これは、リストにリンクを追加する方法です。

private List<string> test(string url, int levels , DoWorkEventArgs eve)
        {
                HtmlAgilityPack.HtmlDocument doc;
                HtmlWeb hw = new HtmlWeb();
                List<string> webSites;// = new List<string>();
                List<string> csFiles = new List<string>();

                                               try
                {
                    doc = hw.Load(url);
                    webSites = getLinks(doc);

webSitesはリストです数回後、「/」または上記のように「//videos...」または「//www...」のようなリストサイトが表示されます。

4

3 に答える 3

0

あなたの質問を理解したかどうかはわかりませんが、

/Videos は、アクセスしているホストのルートから Videos フォルダーにアクセスしていることを意味します

元:

www.somesite.com/Videos

于 2012-09-13T02:04:34.423 に答える
0

絶対 URL と相対 URL があるため、さまざまなリンクからさまざまなフレーバーを取得しているため、それらを適切に絶対 URL にする必要があります (ほとんどの場合、Uri クラスが処理します)。

  • foo/bar.txt - 現在のページと同じパスからの相対 URL
  • ../foo/bar.txt - 現在の 1 つ上のフォルダーからの相対パス
  • /foo/bar.txt - ルートからのサーバー相対パット - 同じサーバー、ルートから始まるパス
  • //www.sample.com/foo/bar.txt - 現在のページと同じスキーム (http/https) の絶対 URL
  • http://www.sample.com/foo/bar.txt - 完全な絶対 URL
于 2012-09-13T02:06:33.313 に答える
0

HTMLタグを解析/読み取ることができるライブラリを使用しているようです。

私の理解のために

var href = link.Attributes["href"].Value;

「href」属性の値を読み取るだけです。

したがって、Web サイトのソース コードが href="/news" のようなリンクを使用していると仮定すると、リストへの相対リンクも取得して保存します。

ターゲット Web サイトのソースコードを表示して、結果と照合するだけです。

于 2012-09-13T02:11:21.390 に答える