HTML auslesen

  • VB.NET
  • .NET (FX) 4.0

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Drahuverar.

    HTML auslesen

    Hallo Leute,

    ich habe eine Frage:

    Wie kann ich am besten informationen aus einer Seite ziehen?
    Nachdem ich mich eingeloggt habe und zu der Seite navigiere (WebBrowser) möchte ich eine Tabelle auslesen-
    wie geht man hier am besten vor?

    Vielen Dank für Vorschläge.
    Drahuverar
    Option Strict On!
    Hallo!

    Mit welchem Programm soll das denn geschehen? VB, VBA, .Net, C++? Mit "WebBrowser" meinst Du das WebBrowser-Steuerelement (ieframe.dll)?

    Da ich gerade selber daran arbeite, hier ein Auszug aus meinem VBA-Projekt.

    In einer Userform:

    Visual Basic-Quellcode

    1. Private Sub CommandButton7_Click()
    2. On Error Resume Next
    3. Dim objIEDoc As Object
    4. Dim objLinks As Object
    5. Dim objLink As Object
    6. Dim strURL As String
    7. Dim strDatum As String
    8. Dim strEDate As String
    9. Dim strZipName As String
    10. Dim strZipPath As String
    11. Dim strFileName As String
    12. Dim strErrFile As String
    13. Dim strArg As String
    14. Dim strZip As String
    15. Dim strPathZ As String
    16. Dim gzFile As String
    17. Dim wbName As String
    18. Dim errorLogFile As Variant
    19. Dim errorFile As Variant
    20. Dim oldSheets As Long
    21. strDatum = ComboBox1.Value
    22. strEDate = ComboBox1.Value
    23. Set objIEDoc = WebBrowser1.Document
    24. Set objLinks = objIEDoc.getElementsByTagName("a")
    25. For Each objLink In objLinks
    26. If objLink.innerText = strDatum Then
    27. strURL = objLink.href
    28. errorLogFile = Split(strURL, "file=")
    29. If OptionButton1.Value = True Then
    30. strZipPath = tbxFilePathLF
    31. strZipName = "access_logfile_" & strEDate & ".txt.gz"
    32. wbName = "access_log_" & strEDate
    33. ElseIf OptionButton2.Value = True Then
    34. strZipPath = tbxFilePathLF
    35. strZipName = "error_logfile_" & strEDate & ".txt.gz"
    36. errorLogFile = Split(strURL, "file=")
    37. errorFile = Split(errorLogFile(1), ".")
    38. wbName = "error_log_" & strEDate
    39. End If
    40. CopyURLToFile strURL, strZipPath & strZipName
    41. DeleteUrlCacheEntry (strURL)
    42. Exit For
    43. End If
    44. Next objLink
    45. On Error GoTo Fin
    46. strZip = ThisWorkbook.Path & "\7za.exe"
    47. strPathZ = tbxFilePathLF
    48. gzFile = strZipPath & strZipName
    49. strFileName = gzFile
    50. strArg = strZip & " e -pHIDE " & strFileName & " -y -o" & strZipPath
    51. ShellAndWait strArg
    52. Fin:
    53. If Err.Number <> 0 Then
    54. MsgBox "Fehler: " & Err.Number & " " & Err.Description
    55. Exit Sub
    56. End If
    57. If OptionButton1.Value = True Then
    58. strErrFile = Replace(gzFile, ".gz", "")
    59. If deleteGZ.Value = True Then Kill gzFile
    60. If deleteLOG.Value = True Then Kill strErrFile
    61. ElseIf OptionButton2.Value = True Then
    62. strErrFile = strPathZ & errorFile(0) & ".txt"
    63. Name strPathZ & errorFile(0) As strErrFile
    64. If deleteGZ.Value = True Then Kill gzFile
    65. If deleteLOG.Value = True Then Kill strErrFile
    66. End If
    67. oldSheets = Application.SheetsInNewWorkbook
    68. Workbooks.Add (xlWBATWorksheet)
    69. Application.SheetsInNewWorkbook = oldSheets
    70. Me.Hide
    71. Application.DisplayAlerts = False
    72. With ActiveWorkbook
    73. .Sheets(1).Name = strEDate
    74. .SaveAs FileName:=tbxFilePathWB & wbName & ".xlsb", FileFormat:=xlExcel12
    75. End With
    76. Application.DisplayAlerts = True
    77. frmStartLogs.Show
    78. End Sub


    In einem allgemeinen Modul:

    Visual Basic-Quellcode

    1. Option Private Module
    2. Option Explicit
    3. Const INTERNET_OPEN_TYPE_PRECONFIG = 0
    4. Const INTERNET_FLAG_EXISTING_CONNECT = &H20000000
    5. Private Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" _
    6. (ByVal lpszAgent As String, ByVal dwAccessType As Long, ByVal lpszProxyName As String, _
    7. ByVal lpszProxyBypass As String, ByVal dwFlags As Long) As Long
    8. Private Declare Function InternetOpenUrl Lib "wininet.dll" Alias "InternetOpenUrlA" _
    9. (ByVal hInternetSession As Long, ByVal lpszUrl As String, ByVal lpszHeaders As String, _
    10. ByVal dwHeadersLength As Long, ByVal dwFlags As Long, ByVal dwContext As Long) As Long
    11. Private Declare Function InternetCloseHandle Lib "wininet.dll" _
    12. (ByVal hInet As Long) As Integer
    13. Private Declare Function InternetReadFile Lib "wininet.dll" _
    14. (ByVal hFile As Long, ByVal lpBuffer As String, ByVal dwNumberOfBytesToRead As Long, _
    15. lNumberOfBytesRead As Long) As Integer
    16. Sub CopyURLToFile(ByVal URL As String, ByVal FileName As String)
    17. Dim hInternetSession As Long
    18. Dim hUrl As Long
    19. Dim DatNum As Integer
    20. Dim ByteAnz As Long
    21. Dim Buffer As String * 4096
    22. Dim DatInhalt As String
    23. On Error GoTo Fehler
    24. If Len(URL) = 0 Or Len(FileName) = 0 Then
    25. MsgBox "Fehlende URL"
    26. Exit Sub
    27. End If
    28. ' open an Internet session, and retrieve its handle
    29. hInternetSession = InternetOpen("dummy", INTERNET_OPEN_TYPE_PRECONFIG, vbNullString, vbNullString, 0)
    30. If hInternetSession = 0 Then
    31. MsgBox "Fehler bei InternetOpen"
    32. Exit Sub
    33. End If
    34. ' open the file and retrieve its handle
    35. hUrl = InternetOpenUrl(hInternetSession, URL, vbNullString, 0, INTERNET_FLAG_EXISTING_CONNECT, 0)
    36. If hUrl = 0 Then
    37. If hInternetSession Then InternetCloseHandle hInternetSession
    38. MsgBox "Fehler bei InternetOpenUrl"
    39. Exit Sub
    40. End If
    41. ' evtl vorhandene Datei löschen
    42. On Error Resume Next
    43. Kill FileName
    44. On Error GoTo Fehler
    45. ' Daten sammeln
    46. Do
    47. InternetReadFile hUrl, Buffer, Len(Buffer), ByteAnz
    48. If ByteAnz = 0 Then Exit Do
    49. DatInhalt = DatInhalt & Left(Buffer, ByteAnz)
    50. Loop
    51. ' Datei schreiben
    52. DatNum = FreeFile
    53. Open FileName For Output As #DatNum
    54. Print #DatNum, DatInhalt;
    55. Close #DatNum
    56. Fehler:
    57. If hUrl Then InternetCloseHandle hUrl
    58. If hInternetSession Then InternetCloseHandle hInternetSession
    59. If Err Then MsgBox "Fehler " & Err.Number & ":" & Err.Description
    60. End Sub


    Gruß, René
    Hi,

    also im Allgemeinen wollte ich ein vorhandenes Projekt erweitern.
    VB.NET- genau. Auf dieses Steuerelement wollte ich mich beziehen.

    Habe an der Stelle leider noch nie etwas gemacht- habe zum Beispiel über System.Threading.Thread.Sleep einen kleinen Moment indem ich nichts mache um die Seite laden zu können...

    ​getElementsByTagName("a")

    Ist denke ich das was ich brauche, und noch 'ne Schleife..

    Ich schau mir deinen Beitrag mal an und wenn ich Fragen dazu habe melde ich mich.
    Vielen Dank erstmal. :)

    Grüße,
    Drahuverar
    Option Strict On!
    Möchtest Du Links auslesen? Dann solltest Du beachten das "mein" Code alle Links einer Seite ausliest. Wenn Du nur eine Linkübersicht (in einer Tabelle) auslesen möchtest solltest Du das Auslesen auf die Tabelle (Übersicht) beschränken.
    Hi,

    nun ja. Ich möchte eine Tabelle "ablesen" um eine gewisse Spalte auszufiltern,
    rein theoretisch bräuchte ich ja nur diesen "Header" mit seinen Werten.

    Allerdings suche ich etwas im Dunkeln.
    Wollte schon die HTML als XML ausspeichern und anschließend meine Werte auslesen.
    ---AAAaaaaber; Ich dachte mir, dass geht doch einfacher.
    Option Strict On!