He creado un simple rastreador web, pero quiero añadir la función de la recursividad para que cada página que se abre puedo conseguir las direcciones URL en esta página, pero no tengo ni idea de cómo puedo hacer eso y también quiero incluir roscas para hacerlo más rápido aquí está mi códigosimple rastreador web en C#
namespace Crawler
{
public partial class Form1 : Form
{
String Rstring;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
WebRequest myWebRequest;
WebResponse myWebResponse;
String 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
Rstring = sreader.ReadToEnd();//reads it to the end
String Links = GetContent(Rstring);//gets the links only
textBox2.Text = Rstring;
textBox3.Text = Links;
streamResponse.Close();
sreader.Close();
myWebResponse.Close();
}
private String GetContent(String Rstring)
{
String sString="";
HTMLDocument d = new HTMLDocument();
IHTMLDocument2 doc = (IHTMLDocument2)d;
doc.write(Rstring);
IHTMLElementCollection L = doc.links;
foreach (IHTMLElement links in L)
{
sString += links.getAttribute("href", 0);
sString += "/n";
}
return sString;
}
Votar para cerrar como una pregunta no bien definida. Considere buscar "rastreador web en C#" y refinar su pregunta para que sea más específica. –
Definitivamente no desea utilizar la recursividad como usted no será capaz de mantener el estado de internet en el stack.You local podría utilizar una pila como Tom sugirió, pero se debe invertir el orden en el que se agrega a AbsoluteUris ser rastreado, de lo contrario, la naturaleza de la pila hará que se arrastre desde la parte inferior de la página y, si va a escribir un rastreador, deberá hacer coincidir el comportamiento de recuperación con un navegador lo más posible. Una cola es una mejor opción. A PriorityQueue es aún mejor. –
PriorityQueue https://svn.arachnode.net/svn/arachnodenet/trunk/Structures/PriorityQueue.cs nombre de usuario/contraseña: Públicas/ –