2017-04-09 8 views
0

ich versuche, Text aus diesem HTML-Tag zu extrahierenWie man Daten von Webseiten extrahieren C#

sometext

, und ich habe diesen 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(); 
        } 
       } 
       } 
      } 
     } 
    } 
} 

Aber ich bin immer noch nicht bekommen der Text "ein bisschen".

Aber wenn ich HtmlAttribute einfügen href = link.Attributes ["id"]; Ich bekomme alle ID-Namen.

Was mache ich falsch?

+0

Können Sie die tatsächliche URL teilen, für die Sie den Inhalt abrufen möchten? Außerdem versuchen Sie, den Wert von 'HtmlAttribute' zu ​​erhalten, nicht das Element. Was Sie versuchen müssen, ist "link.InnerText". –

+0

Hallo, zum Beispiel von dieser Webseite https://www.geocaching.com/geocache/GC257YR_slivercup-studios-east und ich versuche, den Text aus dem Tag zu erhalten: SliverCup Studios East Shiwers

+0

Bekam es .... Hast du es anders versucht? Haben Sie auch debuggt und überprüft, ob Sie das richtige Element bekommen? –

Antwort

1

Sie müssen zunächst den Unterschied zwischen HTML-Knoten und HTMLAttribute verstehen. Sie Code ist nicht annähernd in der Lage, das Problem zu lösen.

HTMLNode stellt die Tags in HTML verwendet wie span, div, p, a und viele andere. HTMLAttribute stellt ein Attribut dar, das für die HTMLNodes verwendet wird, z. B. das href-Attribut wird für a und style, class, id, name usw. verwendet. Attribute werden für fast alle HTML-Tags verwendet.

In folgenden HTML

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

span ist HTMLNode während id und style die Htmlattributes sind. und Sie können den Wert Some FirstName mithilfe der HtmlNode.InnerText-Eigenschaft abrufen.

Auch die Auswahl von HTMLNodes aus HtmlDocument ist nicht so einfach. Sie müssen den richtigen XPath angeben, um den gewünschten Knoten auszuwählen.

in Ihrem Code Nun, wenn Sie den Text in <span id="ctl00_ContentBody_CacheName">SliverCup Studios East</span> geschrieben bekommen wollen, der Teil von HTML von someurl.com ist, müssen Sie folgenden Code schreiben.

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

Der obige Code wählt alle span Tags, die direkt unter dem Dokumentknoten des HTML sind. Tags, die sich tief in der Hierarchie befinden, müssen Sie einen anderen XPath verwenden.

Dies sollte Ihnen helfen, Ihr Problem zu lösen.

+0

Vielen Dank! Dies löste mein Problem und auch Danke für die Erklärung. Es ist ziemlich lange her, seit ich etwas in HTML erstellt habe. Jetzt habe ich irgendwie über den WebClient "log", so dass ich Daten speichern kann, die nur eingeloggten Benutzern angeboten werden, aber ich werde dies in der Zukunft tun. – Shiwers