2017-04-09 1 views
0

J'essaie d'extraire le texte de cette balise htmlComment extraire des données de la page Web en utilisant C#

someText

et j'ai ce code:

using System; 
using System.Net; 
using HtmlAgilityPack; 

namespace GC_data_console 
{ 
    class Program 
    { 
     public static void Main(string[] args) 
     { 

      using (var client = new WebClient()) 
      { 
       // Download the HTML 
       string html = client.DownloadString("https://www.requestedwebsite.com"); 


       HtmlDocument doc = new HtmlDocument(); 
       doc.LoadHtml(html); 


       foreach(HtmlNode link in 
         doc.DocumentNode.SelectNodes("//span")) 
       { 
        HtmlAttribute href = link.Attributes["id='example1'"]; 


        if (href != null) 
        { 
        Console.WriteLine(href.Value.ToString()); 
         Console.ReadLine(); 
        } 
       } 
       } 
      } 
     } 
    } 
} 

Mais je ne suis toujours pas obtenir le texte "sometext".

Mais si j'insère HtmlAttribute href = link.Attributes ["id"]; Je vais obtenir tous les noms d'identification.

Qu'est-ce que je fais de mal?

+0

Aussi, vous essayez d'obtenir la valeur de 'HtmlAttribute' pas l'élément. Ce que vous devez essayer, c'est 'link.InnerText'. –

+0

Bonjour, par exemple à partir de cette page Web https://www.geocaching.com/geocache/GC257YR_slivercup-studios-east et j'essaie d'obtenir le texte de la balise: SliverCup Studios East Shiwers

+0

Vous l'avez ... Avez-vous essayé l'autre façon que j'ai suggéré? Avez-vous également débogué et vérifié si vous obtenez l'élément correct? –

Répondre

1

Vous devez d'abord comprendre la différence entre le nœud HTML et HTMLAttribute. Vous codez est loin de résoudre le problème.

HTMLNode représente les balises utilisées en HTML tels que span, div, p, a et beaucoup d'autres. HTMLAttribute représente l'attribut qui est utilisé pour les HTMLNodes tels que l'attribut href est utilisé pour a, et style, class, id, name etc. Les attributs sont utilisés pour presque toutes les balises HTML.

En dessous HTML

<span id="firstName" style="color:#232323">Some Firstname</span> 

span est HTMLNode tout id et style sont les htmlAttributes. et vous pouvez obtenir la valeur Some FirstName en utilisant la propriété HtmlNode.InnerText.

La sélection de HTMLNodes à partir de HtmlDocument n'est pas aussi simple. Vous devez fournir XPath approprié pour sélectionner le nœud que vous voulez.

maintenant dans votre code si vous voulez obtenir le texte écrit dans <span id="ctl00_ContentBody_CacheName">SliverCup Studios East</span>, qui fait partie de HTML de someurl.com, vous devez d'écrire du code ci-dessous.

using (var client = new WebClient()) 
{ 
    string html = client.DownloadString("https://www.someurl.com"); 

    HtmlDocument doc = new HtmlDocument(); 
    doc.LoadHtml(html); 

    //Selecting all the nodes with tagname `span` having "id=ctl00_ContentBody_CacheName". 
    var nodes = doc.DocumentNode.SelectNodes("//span") 
     .Where(d => d.Attributes.Contains("id")) 
     .Where(d => d.Attributes["id"].Value == "ctl00_ContentBody_CacheName"); 

    foreach (HtmlNode node in nodes) 
    { 
     Console.WriteLine(node.InnerText); 
    } 
} 

Le code ci-dessus sélectionnera tous les span balises qui sont directement sous le nœud de document du HTML. Les balises situées au plus profond de la hiérarchie nécessitent l'utilisation de XPath différent.

Cela devrait vous aider à résoudre votre problème. Pouvez-vous partager l'URL réelle pour laquelle vous essayez d'obtenir le contenu?

+0

Merci! Cela a résolu mon problème et merci aussi pour l'explication. Il y a assez longtemps que j'ai créé quelque chose en html. Maintenant je me suis connecté au WebClient, donc je peux stocker des données, qui sont seulement offertes aux utilisateurs connectés, mais je le ferai dans le futur. – Shiwers