//public virtual List<Uri> Crawl2(Uri websiteUri, PageDownloader pageDownloader, PageParser pageParser) //{ // List<Uri> result = new List<Uri>(); // Queue<Uri> linksToParse = new Queue<Uri>(); // linksToParse.Enqueue(websiteUri); // // while (linksToParse.Count!=0) // { // var linkToParse = linksToParse.Dequeue(); // result.Add(linkToParse); // string htmlPage = pageDownloader.GetPage(linkToParse); // var parsedLinks = pageParser.GetLinks(htmlPage, websiteUri); // // foreach (var link in parsedLinks) // { // if(!result.Contains(link)&&!linksToParse.Contains(link)) // linksToParse.Enqueue(link); // } // } // // return result // .Distinct() // .ToList(); //} public virtual List <Uri> Crawl(Uri websiteUri, PageDownloader pageDownloader, PageParser pageParser) { List <Uri> result = new List <Uri>(); List <Uri> linksToParse = new List <Uri>(); linksToParse.Add(websiteUri); while (linksToParse.Count != 0) { result.Add(linksToParse[0]); string htmlPage = pageDownloader.GetPage(linksToParse[0]); var parsedLinks = pageParser.GetLinks(htmlPage, websiteUri); foreach (var link in parsedLinks) { if (!result.Contains(link) && !linksToParse.Contains(link)) { linksToParse.Add(link); } } linksToParse.RemoveAt(0); } return(result .Distinct() .ToList()); }
virtual public Uri GetSitemapUri(Uri baseUri, PageDownloader downloader) { Uri sitemapUri; try { Uri robotsTxtUri = new Uri(baseUri, "/robots.txt"); string fileContent = ""; fileContent = downloader.GetPage(robotsTxtUri); var sitemapString = fileContent.Split('\n') .Select(x => x.Trim()) .Where(x => x.StartsWith("Sitemap:")) .FirstOrDefault(); if (!String.IsNullOrEmpty(sitemapString)) { sitemapString = sitemapString .Replace("Sitemap:", "") .Trim(); sitemapUri = new Uri(sitemapString); } else { sitemapUri = new Uri(baseUri, "/sitemap.xml"); } return(sitemapUri); } catch { return(sitemapUri = new Uri(baseUri, "/sitemap.xml")); //default sitemap url } }
virtual public List <Uri> Crawl(Uri websiteUri, SitemapLinkReceiver linkReceiver, PageDownloader pageDownloader, SitemapParser sitemapParser) { Uri sitemapUri = linkReceiver.GetSitemapUri(websiteUri, pageDownloader); string sitemap = pageDownloader.GetPage(sitemapUri); List <Uri> crawledLinks = sitemapParser.GetLinks(sitemap, websiteUri); return(crawledLinks); }