Ottenere il testo tra tutti i tag in un dato html e ricorsivamente attraverso i collegamenti

c# html html-agility-pack web-crawler

Domanda

ho controllato un paio di post su overflow dello stack per quanto riguarda ottenere tutte le parole tra tutti i tag html! Tutti mi hanno confuso! alcune persone raccomandano un'espressione regolare specifica per un singolo tag mentre alcuni hanno menzionato le tecniche di analisi! sto praticamente cercando di creare un web crawler! per quello ho l'html del link che ho scaricato nel mio programma in una stringa! Ho anche estratto i collegamenti dal codice HTML che ho memorizzato nella mia stringa di dati! ora voglio strisciare attraverso la profondità ed estrarre le parole sulla pagina di tutti i link estratti dalla mia stringa! ho due domande! come posso recuperare le parole su ciascuna delle pagine Web ignorando tag e script java? in secondo luogo, come vorrei ricorsivamente strisciare attraverso i collegamenti ??

Ecco come sto ottenendo html nella stringa:

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);
        }
    }

ed è così che sto estraendo le rifrazioni dei collegamenti dall'URL che ho dato:

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);
        }
    }

Risposta popolare

Regex non è una buona scelta per l'analisi di file HTML ..

HTML non è rigido né è regolare con il suo formato ..

Usa htmlagilitypack


Questo estrae tutti i link dalla pagina 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>();
}

questo ottiene tutto il contenuto escludendo i tag in 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>();
}

questo striscia attraverso tutti i link

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>();
}



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché