Un robot d’exploration Web simple en C #

J’ai créé un robot d’exploration Web simple, mais je veux append la fonction de récursivité de sorte que chaque page ouverte s’ouvre, je peux obtenir les URL de cette page, mais je ne sais pas comment je peux le faire et je veux également inclure des discussions c’est plus rapide ici c’est mon code

namespace Crawler { public partial class Form1 : Form { Ssortingng Rssortingng; public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { WebRequest myWebRequest; WebResponse myWebResponse; Ssortingng URL = textBox1.Text; myWebRequest = WebRequest.Create(URL); myWebResponse = myWebRequest.GetResponse();//Returns a response from an Internet resource Stream streamResponse = myWebResponse.GetResponseStream();//return the data stream from the internet //and save it in the stream StreamReader sreader = new StreamReader(streamResponse);//reads the data stream Rssortingng = sreader.ReadToEnd();//reads it to the end Ssortingng Links = GetContent(Rssortingng);//gets the links only textBox2.Text = Rssortingng; textBox3.Text = Links; streamResponse.Close(); sreader.Close(); myWebResponse.Close(); } private Ssortingng GetContent(Ssortingng Rssortingng) { Ssortingng sSsortingng=""; HTMLDocument d = new HTMLDocument(); IHTMLDocument2 doc = (IHTMLDocument2)d; doc.write(Rssortingng); IHTMLElementCollection L = doc.links; foreach (IHTMLElement links in L) { sSsortingng += links.getAtsortingbute("href", 0); sSsortingng += "/n"; } return sSsortingng; } 

J’ai corrigé votre méthode GetContent comme suit pour obtenir de nouveaux liens à partir de la page explorée:

 public ISet GetNewLinks(ssortingng content) { Regex regexLink = new Regex("(?<= newLinks = new HashSet(); foreach (var match in regexLink.Matches(content)) { if (!newLinks.Contains(match.ToSsortingng())) newLinks.Add(match.ToSsortingng()); } return newLinks; } 

Mis à jour

Corrigé: regex devrait être regexLink. Merci @shashlearner pour l’avoir signalé (mon type d’erreur).

J’ai créé quelque chose de similaire en utilisant Reactive Extension .

https://github.com/Misterhex/WebCrawler

J’espère que cela peut vous aider.

 Crawler crawler = new Crawler(); IObservable observable = crawler.Crawl(new Uri("http://www.codinghorror.com/")); observable.Subscribe(onNext: Console.WriteLine, onCompleted: () => Console.WriteLine("Crawling completed")); 

Ce qui suit comprend une réponse / recommandation.

Je crois que vous devriez utiliser un dataGridView au lieu d’un textBox car lorsque vous le regardez dans l’interface graphique, il est plus facile de voir les liens (URL) trouvés.

Vous pouvez changer:

 textBox3.Text = Links; 

à

  dataGridView.DataSource = Links; 

Maintenant pour la question, vous n’avez pas inclus:

 using System. "'s" 

lesquels ont été utilisés, il serait apprécié si je pouvais les obtenir car je ne peux pas le comprendre.

Du sharepoint vue de la conception, j’ai écrit quelques webcrawlers. Fondamentalement, vous souhaitez implémenter une recherche en profondeur d’abord à l’aide d’une structure de données Stack. Vous pouvez également utiliser Breadth First Search, mais vous rencontrerez probablement des problèmes de mémoire de stack. Bonne chance.