Obtención de texto entre todas las etiquetas en un html dado y recursivamente a través de enlaces

c# html html-agility-pack web-crawler

Pregunta

¡He revisado un par de publicaciones en el desbordamiento de pila con respecto a obtener todas las palabras entre todas las etiquetas html! ¡Todos ellos me confundieron! ¡Algunas personas recomiendan la expresión regular específicamente para una sola etiqueta, mientras que otras han mencionado técnicas de análisis! Básicamente estoy tratando de hacer un rastreador web! ¡para eso tengo el html del enlace que busqué en mi programa en una cadena! ¡También extraí los enlaces del html que almacené en mi cadena de datos! ¡Ahora quiero rastrear a través de la profundidad y extraer palabras en la página de todos los enlaces que extraje de mi cadena! Tengo dos preguntas! ¿Cómo puedo obtener las palabras en cada una de las páginas web ignorando las etiquetas y el script java? En segundo lugar, ¿cómo me arrastraría recursivamente a través de los enlaces?

Así es como obtengo html en la cadena:

public void getting_html_code_of_link()
    {
        string urlAddress = "http://google.com";

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(urlAddress);
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        if (response.StatusCode == HttpStatusCode.OK)
        {
            Stream receiveStream = response.GetResponseStream();
            StreamReader readStream = null;
            if (response.CharacterSet == null)
                readStream = new StreamReader(receiveStream);
            else
                readStream = new StreamReader(receiveStream, Encoding.GetEncoding(response.CharacterSet));
            data = readStream.ReadToEnd();
            response.Close();
            readStream.Close();
            Console.WriteLine(data);
        }
    }

y así es como estoy extrayendo las referencias de enlaces de la URL que doy:

public void getting_html_code_of_link()
    {
        string urlAddress = "http://google.com";

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(urlAddress);
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        if (response.StatusCode == HttpStatusCode.OK)
        {
            Stream receiveStream = response.GetResponseStream();
            StreamReader readStream = null;
            if (response.CharacterSet == null)
                readStream = new StreamReader(receiveStream);
            else
                readStream = new StreamReader(receiveStream, Encoding.GetEncoding(response.CharacterSet));
            data = readStream.ReadToEnd();
            response.Close();
            readStream.Close();
            Console.WriteLine(data);
        }
    }

Respuesta popular

Regex no es una buena opción para analizar archivos HTML.

HTML no es estricto ni es regular con su formato.

Usa htmlagilitypack


Esto extrae todos los enlaces de la página web.

public List<string> getAllLinks(string webAddress)
{
    HtmlAgilityPack.HtmlWeb web = new HtmlAgilityPack.HtmlWeb();
    HtmlDocument newdoc=web.Load(webAddress);

    return doc.DocumentNode.SelectNodes("//a[@href]")
              .Where(y=>y.Attributes["href"].Value.StartsWith("http"))
              .Select(x=>x.Attributes["href"].Value)
              .ToList<string>();
}

Esto obtiene todo el contenido excluyendo las etiquetas en el html.

public List<string> getAllLinks(string webAddress)
{
    HtmlAgilityPack.HtmlWeb web = new HtmlAgilityPack.HtmlWeb();
    HtmlDocument newdoc=web.Load(webAddress);

    return doc.DocumentNode.SelectNodes("//a[@href]")
              .Where(y=>y.Attributes["href"].Value.StartsWith("http"))
              .Select(x=>x.Attributes["href"].Value)
              .ToList<string>();
}

Esto se arrastra a través de todos los enlaces.

public List<string> getAllLinks(string webAddress)
{
    HtmlAgilityPack.HtmlWeb web = new HtmlAgilityPack.HtmlWeb();
    HtmlDocument newdoc=web.Load(webAddress);

    return doc.DocumentNode.SelectNodes("//a[@href]")
              .Where(y=>y.Attributes["href"].Value.StartsWith("http"))
              .Select(x=>x.Attributes["href"].Value)
              .ToList<string>();
}



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué