Daten aus HTML-Tabelle auslesen.

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Morrison.

    Daten aus HTML-Tabelle auslesen.

    Hallo, ich hab ne Frage. Ich mache nähmlich ein programm, dass Daten einer HTML-Tabelle aus dieser seite auslesen soll.
    clan.z8games.com/clanstat_cf.aspx?guildid=217089 Mit der Tabelle is unten links Members gemeint. Es sollte bei jedem die "Points: ...", Den namen und wenn möglich auch das Rangsymbol auslesen können.Dabei gibt es 2 Probleme. Erstens finde ich keine lösung wie ich die daten der Tabelle auslesen kann. Habs schon mit WebBrowser1.Document.GetElementById probiert. Und Zweitens weil man die Daten der 2. Seite nur damit abrufen kann:

    HTML-Quellcode

    1. <td id="memberpager2" onclick="bind_1pageMembers(2,10,5);" style="width:15px;cursor:pointer">2</td>
    . Ich bin jetzt nich einer der "VB Pros" und kenn mich auch nich so mit Foren aus ?( . Ich hab halt soviel gegooglet wie ich konnt, fand aber nichts.
    Danke für jede Hilfe. :)

    Marco3201 schrieb:

    Erstens finde ich keine lösung wie ich die daten der Tabelle auslesen kann.

    Hier ein paar Methoden, wie Du Deine Tables auslesen kannst:

    VB.NET-Quellcode

    1. ''' <summary>
    2. ''' Holt die HTML Tabellen
    3. ''' </summary>
    4. ''' <param name="html">HTML</param>
    5. ''' <returns>Stringliste</returns>
    6. Function getHtmlTabels(html As String) As List(Of String)
    7. Dim tablePattern As String = "<table.*?>(.*?)</table>"
    8. Dim tableMatches As MatchCollection = Regex.Matches(html, tablePattern, RegexOptions.Singleline)
    9. Dim tableContents As New List(Of String)()
    10. For Each match As Match In tableMatches
    11. tableContents.Add(match.Value)
    12. Next
    13. Return tableContents
    14. End Function
    15. ''' <summary>
    16. ''' Holt die Zeilen aus HTML-Tabellen
    17. ''' </summary>
    18. ''' <param name="html">HTML</param>
    19. ''' <returns>Stringliste</returns>
    20. Function getTableRows(html As String) As List(Of String)
    21. Dim tablePattern As String = "<tr.*?>(.*?)</tr>"
    22. Dim tableMatches As MatchCollection = Regex.Matches(html, tablePattern, RegexOptions.Singleline)
    23. Dim tableContents As New List(Of String)()
    24. For Each match As Match In tableMatches
    25. tableContents.Add(match.Value)
    26. Next
    27. Return tableContents
    28. End Function
    29. ''' <summary>
    30. ''' Holt die Spalten aus HTML-Tabellen-Zeilen
    31. ''' </summary>
    32. ''' <param name="html">HTML</param>
    33. ''' <returns>Stringliste</returns>
    34. Function getTableCols(html As String) As List(Of String)
    35. Dim tablePattern As String = "<td.*?>(.*?)</td>"
    36. Dim tableMatches As MatchCollection = Regex.Matches(html, tablePattern, RegexOptions.Singleline)
    37. Dim tableContents As New List(Of String)()
    38. For Each match As Match In tableMatches
    39. tableContents.Add(match.Value)
    40. Next
    41. Return tableContents
    42. End Function
    Also mit WebBrowser1.Document.InvokeScript("befehl") kann man ein Java-Befehl absetzen.

    Im eigentlichen Java-Script sieht der Befehl so aus:

    Spoiler anzeigen
    function showMembers() { // include lieutenants part now
    var numericReg = /^\d*[0-9]$/;
    if (!numericReg.test(clanid)) {
    //alert('Not a valid clan id.');
    return;
    }
    $.ajax({
    type: 'POST',
    contentType: "application/json; charset=utf-8",
    url: clanServicesBase + 'getClanMembers', // will return all members include lieutenants and clan leader
    data: '{"clanid":"' + clanid + '"}',
    dataType: 'json',
    success: function(msg) {
    //alert(msg.d);
    //memberlist = $.parseJSON(msg.d);
    //$("#hd_membersinfo").val(msg.d);

    allMembersInfo = msg.d;

    memberlist = $.parseJSON(allMembersInfo);
    if (memberlist == undefined)
    return;

    var normallist = filterMembers(memberlist, '0'); // get normal members
    var total_members = normallist.length;
    var memberpagesize = 10;
    var total_MemberPage = Math.ceil(total_members / memberpagesize);
    //alert(total_members + "//" + total_MemberPage);
    bind_1pageMembers(1, memberpagesize, total_MemberPage); //1 is first page, 10 is pagesize
    $('#tr_pagelinks').empty();

    if (total_MemberPage > 1) { // if 1 no show
    for (i = 1; i <= total_MemberPage; i++) {
    $('#tr_pagelinks').append("<td id=memberpager" + i + " style='width:15px;cursor:pointer' onclick='bind_1pageMembers(" + i + "," + memberpagesize + "," + total_MemberPage + ");'>" + i + "</td>");
    }
    }
    $('#tr_pagelinks').append("<td style='width:215px;'></td>"); // add one more column to hold place

    //next bind lieutenants list
    var lieutenantlist = filterMembers(memberlist, '8'); // get lieutenant members
    var total_lieutenants = lieutenantlist.length;
    var lieutenantpagesize = 5;
    var total_lieutenantPage = Math.ceil(total_lieutenants / lieutenantpagesize);
    //alert(total_members + "//" + total_MemberPage);
    bind_1pageLieutenants(1, lieutenantpagesize, total_lieutenantPage); //1 is first page, 10 is pagesize
    $('#tr_lieutenantPager').empty(); // pager links

    if (total_lieutenantPage > 1) { // if 1 no show
    for (i = 1; i <= total_lieutenantPage; i++) {
    $('#tr_lieutenantPager').append("<td id=lietenantpager" + i + " style='width:15px;cursor:pointer' onclick='bind_1pageLieutenants(" + i + "," + lieutenantpagesize + "," + total_lieutenantPage + ");'>" + i + "</td>");
    }
    }
    $('#tr_lieutenantPager').append("<td style='width:215px;'></td>");

    // next show leader info

    var leaderlist = filterMembers(memberlist, '9'); // get lieutenant members

    $('#td_leader').html("<a href='charstat_cf.aspx?usn=" + leaderlist[0].usn + "'>" + leaderlist[0].nick + "</a>");
    var rank = parseInt(leaderlist[0].lev) + 1;
    $('#img_leader').attr('src', "/images/rankingicon/class_" + rank + ".jpg");
    var currentuser = $.parseJSON(currentuserinfo);
    if (leaderlist[0].usn == currentuser.usn) {
    $('#td_leader_points').html("Points:&nbsp;&nbsp;" + leaderlist[0].clan_points);
    }

    },
    failure: function(msg) {
    //alert('failed');
    }
    })

    }


    Hab bis jetzt nur das versucht:

    Quellcode

    1. Dim members As Object
    2. members = WebBrowser1.Document.InvokeScript("eval", {"showMembers"})
    3. MessageBox.Show(members.ToString)

    Da ich mich da so gut wie garnicht auskenne bekomm ich als Rückgabewert leider nur System.__ComObject.

    Die ganze Java-Datei von der Seite läd man hier: clan.z8games.com/script/js_match_new.js