递归方法进入死循环

时间:2019-06-06 08:15:22

标签: c#

我正在写一个基于HTMLAgilityPackFizzler的简单搜寻器,以便检查网页上是否存在关键字及其对应的子链接。然后,对所有深度达50级的子链接重复相同的过程。使数字呈指数增长。

问题是我想将我编写的方法转换为递归方法,但是它不起作用-在第一个链接后卡住,而且工作速度很慢。

这是我目前所做的:

    public static void GetAllLinks(HtmlWeb web, List<string> relevantLinks, string inputLink)
    {
        string mainLink = "http://www.cnet.com";
        Console.WriteLine("Current count of links: " + relevantLinks.Count + "\tCurrent link: " + inputLink);


        HtmlDocument html = web.Load(inputLink);
        HtmlDocument htmlInner = new HtmlDocument();

        html.DocumentNode.Descendants()
            .Where(n => n.Name == "script" || n.Name == "style")
            .ToList()
            .ForEach(n => n.Remove());

        var text = htmlInner.DocumentNode.InnerText.ToLower();
        text = Regex.Replace(text, @"\r\n?|\n", "");
        text = Regex.Replace(text, " {2,}", " ");
        text = text.Trim();

        if (text.Contains("microsoft"))
        {
            if (!relevantLinks.Contains(inputLink))
            {
                relevantLinks.Add(inputLink);
            }
        }

        var linkTagsList = html.DocumentNode.QuerySelectorAll("a").ToList();

        foreach (var linkTag in linkTagsList)
        {
            if (linkTag.Attributes["href"] != null)
            {
                var link = linkTag.Attributes["href"].Value;

                // Check if the link found is the sublink of the main link
                if (!link.Contains(mainLink))
                {
                    // Check if only partial link then concat with main one
                    if (link.Substring(0, 1) == "/")
                    {
                        if (inputLink.Substring(inputLink.Length - 1, 1) == "/")
                            inputLink = inputLink.Substring(0, inputLink.Length - 1);
                        link = inputLink + link;
                    }
                    else
                    {
                        link = String.Empty;
                    }
                }
                if (!string.IsNullOrEmpty(link))
                {
                    Console.WriteLine(link);
                    GetAllLinks(web, relevantLinks, link);
                }
            }
        }

    }

任何提示或建议都将受到高度赞赏。

0 个答案:

没有答案