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”

我不确定“/”是指正确的网站还是以“/videoes?...或“//www.youtube...

每次我需要获取以 http 或 https 开头的网站的链接,也许只是 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 是一个列表 几次后,我在列表站点中看到“/”或如上“//videoes... 或“//www...。

4

3 回答 3

0

不确定是否理解您的问题,但

/Videos 表示它正在从您正在访问的主机的根目录访问 Videos 文件夹

前任:

www.somesite.com/Videos

于 2012-09-13T02:04:34.423 回答
0

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

  • foo/bar.txt - 来自与当前页面相同路径的相对 url
  • ../foo/bar.txt - 当前上一个文件夹的相对路径
  • /foo/bar.txt - 来自根目录的服务器相对 pat - 相同的服务器,从根目录开始的路径
  • //www.sample.com/foo/bar.txt - 与当前页面具有相同方案 (http/https) 的绝对 url
  • http://www.sample.com/foo/bar.txt - 完整的绝对网址
于 2012-09-13T02:06:33.313 回答
0

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

为了我的理解

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

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

因此,假设网站的源代码使用 href="/news" 之类的链接,它甚至会抓取并保存到您列表的相对链接。

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

于 2012-09-13T02:11:21.390 回答