2016-07-20 18 views
0

In diesem HTML-Code muss ich Attribute und Daten von HTML-Tags erhalten. Dies ist ein Beispiel:Mit HtmlAgillityPack wie kann man Daten und Attribute HTML-Tags bekommen?

...

<tr class="first-row"><td class="first-cell tl"><a href="../matchdetails.php?matchid=MaxATAKK" onclick="win(this.href, 560, 500, 0, 1); return false;">Gefle - Kalmar</a></td><td class="result"><a href="../matchdetails.php?matchid=MaxATAKK" onclick="win(this.href, 560, 500, 0, 1); return false;">4:2</a></td><td class="odds best-betrate" data-odd="3.53"></td><td class="odds" data-odd="3.37"></td><td class="odds" data-odd="2.04"></td><td class="last-cell nobr date">18.07.2016</td></tr> 

...

Also, ich brauche Daten zwischen td-Tags und Attribute (Daten-ungerade) zu erhalten.

Das ist mein C# -Code:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 
using HtmlAgilityPack; 

namespace bexscraping 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      string url = "http://www.betexplorer.com/soccer/sweden/allsvenskan/results/"; 
      HtmlWeb web = new HtmlWeb(); 
      HtmlAgilityPack.HtmlDocument doc = web.Load(url); 
      foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//table")) 
      { 

       //node.Remove(); 

       outputLabel.Text += node.InnerText; 
      } 



     } 

    } 

} 

Jeder Vorschlag? Vielen Dank!

+0

Try-Filterung mit XPath: .SelectNodes ("// td [@class =" "odds" "]") Das ist, wie XPath Doc sagt, wählen Sie alle Knoten td, die ein Attribut "class" enthalten ist gleich "Chancen". – CiccioRocca

+0

Danke, hast du einen Link oder kannst du mir ein Beispiel geben? Danke noch einmal! – Marci

Antwort

1

Hier ist es einige Msdn Beispiele: XPath Examples; XPath Reference

Nach Ihrem Schnipsel können Sie alle Tags auswählen TD dass Daten-ungerade Attribut enthalten.

private void Form1_Load(object sender, EventArgs e) 
{ 

     string url = "http://www.betexplorer.com/soccer/sweden/allsvenskan/results/"; 
     HtmlWeb web = new HtmlWeb(); 
     HtmlAgilityPack.HtmlDocument doc = web.Load(url); 
     var nodes = doc.DocumentNode.SelectNodes("//td[@data-odd]"); 
     foreach (HtmlNode node in nodes) 
     { 
      //Here process your node 
      //Example: to get data-odd value 
      var val = node.GetAttributeValue("data-odd", ""); 
     } 
} 
+0

Danke für Ihre Antwort. Ich habe es versucht, aber ich habe nur eine Fehlermeldung erhalten: "Der Name Odds existiert im aktuellen Kontext nicht". Was ist los mit dir? Nochmals vielen Dank – Marci

+0

@Marci Sorry, ich habe den Code getestet, aber ich kopierte schlecht. Ich aktualisiere die Antwort. Nur nicht Odds (0), sondern Knoten. – CiccioRocca

+0

Ich habe versucht, Ihre Korrektur, aber ich habe einen anderen Fehler, mehr oder weniger ist dies: HtmlAgilityPack.HtmlAttributeCollection 'enthält keine Definition von' Item 'und wurde nicht gefunden, keine Erweiterungsmethode' Item 'ein erstes Argument des Typs' HtmlAgilityPack. HtmlAttributeCollection '. Wahrscheinlich fehlt eine using-Direktive oder ein Verweis auf eine Assembly. – Marci