我试图从网站获取所有链接并将它们放在列表中但有时我得到奇怪的链接为什么?

时间:2012-09-13 01:59:30

标签: c#

这是获取链接的代码:

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;

        }

有时我获得的链接就像“/”或:

一样开始

“/视频?特征= MH” 要么 “//www.youtube.com/my_videos_upload”

我不确定“/”是否意味着适当的网站或以“/ videoes”开头的网站?... 或者“//www.youtube ......

我每次都需要获取以http或https开头的网站的链接,也许只是www也算作一个合适的网站。问题是我将其定义为适当的网站地址和链接,而不是什么?

我确定我的getLinks功能不好,但代码不是正确的方式。

这是我添加链接到List的方式:

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是一个列表 几次我在列表网站中看到“/”或如上所述“//视频......或”// www ....

3 个答案:

答案 0 :(得分:0)

不确定是否理解了你的问题但是

/视频表示它正在从您正在访问的主机的根目录中访问“视频”文件夹

例如:

www.somesite.com/Videos

答案 1 :(得分:0)

有绝对和相对的Urls - 所以你从不同的链接获得不同的风格,你需要适当地使它们成为绝对URL(Uri类主要为你处理它)。

  • foo / bar.txt - 来自与当前页面相同路径的相对网址
  • ../ foo / bar.txt - 当前
  • 上方一个文件夹的相对路径
  • /foo/bar.txt - 来自root的服务器相对pat - 同一服务器,从root开始的路径
  • // www.sample.com/foo/bar.txt - 与当前页面具有相同方案(http / https)的绝对网址
  • http://www.sample.com/foo/bar.txt - 完整绝对网址

答案 2 :(得分:0)

看起来您正在使用能够解析/读取html标记的库。

为了我的理解

var href = link.Attributes [“href”]。值;

除了读取“href”属性的值之外什么都不做。

假设网站的源代码使用的链接如href =“/ news” 它会抓取并保存到列表的相关链接。

只需查看目标网站的源代码,然后根据结果进行检查。