Obtenir du texte entre toutes les balises d'un code HTML donné et parcourir de manière récursive les liens

c# html html-agility-pack web-crawler

Question

J'ai vérifié quelques articles sur le dépassement de capacité de la pile pour obtenir tous les mots entre toutes les balises html! Tous m'ont confondu! certaines personnes recommandent l'expression régulière spécifiquement pour une seule balise, tandis que d'autres ont mentionné les techniques d'analyse syntaxique! essaie fondamentalement de faire un robot Web! pour cela, j'ai le code HTML du lien que j'ai récupéré dans mon programme dans une chaîne! J'ai également extrait les liens du code HTML que j'ai stocké dans ma chaîne de données! Maintenant, je veux parcourir la profondeur et extraire des mots sur la page de tous les liens que j'ai extraits de ma chaîne! J'ai deux questions! Comment puis-je récupérer les mots sur chacune des pages Web en ignorant les balises et le script java? Deuxièmement, comment pourrais-je explorer récursivement les liens?

Voici comment obtenir du code HTML dans la chaîne:

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

Et voici comment extraire des références de lien à partir de l’URL que je donne:

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

Réponse populaire

Regex n'est pas un bon choix pour analyser les fichiers HTML.

HTML n'est pas strict ni régulier avec son format.

Utilisez htmlagilitypack


Ceci extrait tous les liens de la page 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>();
}

cela obtient tout le contenu sauf les balises dans le 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>();
}

cette rampe à travers tous les liens

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



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi