Schnellere Methode für _IEBodyReadHTML?

  • Gibt es eine schnellere Methode für _IEBodyReadHTML, die den selben String zurückgibt?

    [autoit]


    Func Ulam($n)
    Return 1
    EndFunc

    [/autoit]


    Rekursion FTW :D

    Einmal editiert, zuletzt von retrokid (5. Juni 2011 um 16:17)

  • Mit StringRegExp geht das schneller, allerdings nur wenn du den Quelltext bereits hast... Ansonsten geht das gar nicht anders. Willst du unbedingt mit den IE Funktionen arbeiten, oder würde dich die InetRead Funktion zufriedenstellen?

    [autoit]

    $aBody = StringRegExp($sHTML, '(?s)<body>(.+)</body>', 3)
    ConsoleWrite($aBody[0] & @CRLF)

    [/autoit]
  • Es geht um sehr viele Seiten, die verarbeitet werden müssen, deshalb möchte ich ja vom langsamen IE weg,
    oder kann man mithilfe einer IE-Funktion den Quelltext bekommen ohne vorher in einem Objekt zu der Seite zu navigieren?
    Jede Seite mit INetRead downzuloaden dauert glaub ich auch zu lange.
    Ich habe INetGetSource getestet, aber es liefert einen anderes Quelltext-Format zurück, und somit funktioniert mein Programm nicht mehr.
    _INetGetSource erkennt z.B kein "e" mit Betonung, sondern setzt dafür einen Code ein.

    [autoit]


    Func Ulam($n)
    Return 1
    EndFunc

    [/autoit]


    Rekursion FTW :D

  • Das sind die HTML-Entitäten.
    Die musst du noch umwandeln.
    Die häufigsten solltest du mit dieser Funktion erwischen:

    Spoiler anzeigen
    [autoit]

    Global $s_URL = "http://www.autoit.de"

    [/autoit] [autoit][/autoit] [autoit]

    Global $a_BodySource = StringRegExp(_ConvertEntities(BinaryToString(InetRead($s_URL))), '(?s)<body[^>]*>(.+)</body>', 1)
    ConsoleWrite($a_BodySource[0] & @CRLF)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _ConvertEntities($s_Source)
    Local $aEntities[95][2] = [["&quot;", 34],["&amp;", 38],["&lt;", 60],["&gt;", 62],["&nbsp;", 32] _
    ,["&iexcl;", 161],["&cent;", 162],["&pound;", 163],["&curren;", 164],["&yen;", 165],["&brvbar;", 166] _
    ,["&sect;", 167],["&uml;", 168],["&copy;", 169],["&ordf;", 170],["&not;", 172],["&shy;", 173] _
    ,["&reg;", 174],["&macr;", 175],["&deg;", 176],["&plusmn;", 177],["&sup2;", 178],["&sup3;", 179] _
    ,["&acute;", 180],["&micro;", 181],["&para;", 182],["&middot;", 183],["&cedil;", 184],["&sup1;", 185] _
    ,["&ordm;", 186],["&raquo;", 187],["&frac14;", 188],["&frac12;", 189],["&frac34;", 190],["&iquest;", 191] _
    ,["&Agrave;", 192],["&Aacute;", 193],["&Atilde;", 195],["&Auml;", 196],["&Aring;", 197],["&AElig;", 198] _
    ,["&Ccedil;", 199],["&Egrave;", 200],["&Eacute;", 201],["&Ecirc;", 202],["&Igrave;", 204],["&Iacute;", 205] _
    ,["&Icirc;", 206],["&Iuml;", 207],["&ETH;", 208],["&Ntilde;", 209],["&Ograve;", 210],["&Oacute;", 211] _
    ,["&Ocirc;", 212],["&Otilde;", 213],["&Ouml;", 214],["&times;", 215],["&Oslash;", 216],["&Ugrave;", 217] _
    ,["&Uacute;", 218],["&Ucirc;", 219],["&Uuml;", 220],["&Yacute;", 221],["&THORN;", 222],["&szlig;", 223] _
    ,["&agrave;", 224],["&aacute;", 225],["&acirc;", 226],["&atilde;", 227],["&auml;", 228],["&aring;", 229] _
    ,["&aelig;", 230],["&ccedil;", 231],["&egrave;", 232],["&eacute;", 233],["&ecirc;", 234],["&euml;", 235] _
    ,["&igrave;", 236],["&iacute;", 237],["&icirc;", 238],["&iuml;", 239],["&eth;", 240],["&ntilde;", 241] _
    ,["&ograve;", 242],["&oacute;", 243],["&ocirc;", 244],["&otilde;", 245],["&ouml;", 246],["&divide;", 247] _
    ,["&oslash;", 248],["&ugrave;", 249],["&uacute;", 250],["&ucirc;", 251],["&uuml;", 252],["&thorn;", 254]]
    For $x = 0 To UBound($aEntities) - 1
    $s_Source = StringReplace($s_Source, $aEntities[$x][0], Chr($aEntities[$x][1]), 0, 2)
    Next
    For $x = 32 To 255
    $s_Source = StringReplace($s_Source, "&#" & $x & ";", ChrW($x))
    Next
    Return $s_Source
    EndFunc

    [/autoit]
  • InetGetSource ist das selbe wie InetRead... :rolleyes:

    [autoit='_INetGetSource']

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _INetGetSource
    ; Description ...: Gets the source from an URL without writing a temp file.
    ; Parameters ....: $s_URL - The URL of the site.
    ; $bString - If True the data is returned in string format, otherwise binary format.
    ; Return values .: Success - The read string and sets @extended to the number of bytes returned.
    ; Failure - An empty string and and sets @error to non-zero.
    ; Author ........: Wouter van Kesteren.
    ; ===============================================================================================================================
    Func _INetGetSource($s_URL, $bString = True)
    Local $sString = InetRead($s_URL, 1)
    Local $nError = @error, $nExtended = @extended
    If $bString Then $sString = BinaryToString($sString)
    Return SetError($nError, $nExtended, $sString)
    EndFunc ;==>_INetGetSource

    [/autoit]


    Deine Internetverbindung können wir auch nicht beschleunigen. :pinch:
    Und wenn du BinaryToString mit 4 als 2tem Parameter verwendest brauchst du AspirinJunkies Funktion noch nicht einmal.

  • Und wenn du BinaryToString mit 4 als 2tem Parameter verwendest brauchst du AspirinJunkies Funktion noch nicht einmal.

    Bist du sicher?
    Bei meinen Versuchen sind, auch als UTF8-codiert ausgelesen, noch genug Entitäten übrig geblieben.
    Hätte mich auch gewundert da ich zwischen den HTML-codierten Zeichen und dem verwendeten Zeichensatz keinen Zusammenhang sehe.

    Um die Funktion von oben noch bisschen zu erweitern so dass mehr Zeichen gefunden werden hab ich jetzt noch mal eine selbst geschrieben:

    _ConvertEntities
    [autoit]


    Global $s_URL = "http://www.autoit.de"
    Global $s_Source = BinaryToString(InetRead($s_URL), 4)

    [/autoit] [autoit][/autoit] [autoit]

    _ConvertEntities($s_Source)

    [/autoit] [autoit][/autoit] [autoit]

    ConsoleWrite($s_Source)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ; #FUNCTION# ======================================================================================
    ; Name ..........: _ConvertEntities()
    ; Description ...: Wandelt HTML-Entitäten in einem Quellcode in ihre entsprechenden Zeichen
    ; Syntax ........: _ConvertEntities($sURL)
    ; Parameters ....: $sURL - String in welchem die Entitäten umgewandelt werden sollen
    ; Return values .: nichts (String wird direkt verändert)
    ; Author ........: AspirinJunkie
    ; =================================================================================================
    Func _ConvertEntities(ByRef $s_S)
    Local Static $o_Dict = ObjCreate("Scripting.Dictionary")
    Local $a_RegExp, $s_T
    Local Static $a_NameEnt[253][2] = [["quot", 34],["amp", 38],["apos", 39],["lt", 60],["gt", 62],["quot", 34],["amp", 38],["apos", 39],["lt", 60],["gt", 62],["nbsp", 160], _
    ["iexcl", 161],["cent", 162],["pound", 163],["curren", 164],["yen", 165],["brvbar", 166],["sect", 167],["uml", 168],["copy", 169], _
    ["ordf", 170],["laquo", 171],["not", 172],["reg", 174],["macr", 175],["deg", 176],["plusmn", 177],["sup2", 178],["sup3", 179], _
    ["acute", 180],["micro", 181],["para", 182],["middot", 183],["cedil", 184],["sup1", 185],["ordm", 186],["raquo", 187], _
    ["frac14", 188],["frac12", 189],["frac34", 190],["iquest", 191],["Agrave", 192],["Aacute", 193],["Acirc", 194],["Atilde", 195], _
    ["Auml", 196],["Aring", 197],["AElig", 198],["Ccedil", 199],["Egrave", 200],["Eacute", 201],["Ecirc", 202],["Euml", 203], _
    ["Igrave", 204],["Iacute", 205],["Icirc", 206],["Iuml", 207],["ETH", 208],["Ntilde", 209],["Ograve", 210],["Oacute", 211], _
    ["Ocirc", 212],["Otilde", 213],["Ouml", 214],["times", 215],["Oslash", 216],["Ugrave", 217],["Uacute", 218],["Ucirc", 219], _
    ["Uuml", 220],["Yacute", 221],["THORN", 222],["szlig", 223],["agrave", 224],["aacute", 225],["acirc", 226],["atilde", 227], _
    ["auml", 228],["aring", 229],["aelig", 230],["ccedil", 231],["egrave", 232],["eacute", 233],["ecirc", 234],["euml", 235], _
    ["igrave", 236],["iacute", 237],["icirc", 238],["iuml", 239],["eth", 240],["ntilde", 241],["ograve", 242],["oacute", 243],["ocirc", 244], _
    ["otilde", 245],["ouml", 246],["divide", 247],["oslash", 248],["ugrave", 249],["uacute", 250],["ucirc", 251],["uuml", 252],["yacute", 253], _
    ["thorn", 254],["yuml", 255],["OElig", 338],["oelig", 339],["Scaron", 352],["scaron", 353],["Yuml", 376],["fnof", 402],["circ", 710], _
    ["tilde", 732],["Alpha", 913],["Beta", 914],["Gamma", 915],["Delta", 916],["Epsilon", 917],["Zeta", 918],["Eta", 919],["Theta", 920], _
    ["Iota", 921],["Kappa", 922],["Lambda", 923],["Mu", 924],["Nu", 925],["Xi", 926],["Omicron", 927],["Pi", 928],["Rho", 929],["Sigma", 931], _
    ["Tau", 932],["Upsilon", 933],["Phi", 934],["Chi", 935],["Psi", 936],["Omega", 937],["alpha", 945],["beta", 946],["gamma", 947], _
    ["delta", 948],["epsilon", 949],["zeta", 950],["eta", 951],["theta", 952],["iota", 953],["kappa", 954],["lambda", 955],["mu", 956], _
    ["nu", 957],["xi", 958],["omicron", 959],["pi", 960],["rho", 961],["sigmaf", 962],["sigma", 963],["tau", 964],["upsilon", 965], _
    ["phi", 966],["chi", 967],["psi", 968],["omega", 969],["thetasym", 977],["upsih", 978],["piv", 982],["ensp", 8194], _
    ["emsp", 8195],["thinsp", 8201],["ndash", 8211],["mdash", 8212],["lsquo", 8216],["rsquo", 8217],["sbquo", 8218], _
    ["ldquo", 8220],["rdquo", 8221],["bdquo", 8222],["dagger", 8224],["Dagger", 8225],["bull", 8226],["hellip", 8230], _
    ["permil", 8240],["prime", 8242],["Prime", 8243],["lsaquo", 8249],["rsaquo", 8250],["oline", 8254],["frasl", 8260], _
    ["euro", 8364],["image", 8465],["weierp", 8472],["real", 8476],["trade", 8482],["alefsym", 8501],["larr", 8592], _
    ["uarr", 8593],["rarr", 8594],["darr", 8595],["harr", 8596],["crarr", 8629],["lArr", 8656],["uArr", 8657],["rArr", 8658], _
    ["dArr", 8659],["hArr", 8660],["forall", 8704],["part", 8706],["exist", 8707],["empty", 8709],["nabla", 8711],["isin", 8712], _
    ["notin", 8713],["ni", 8715],["prod", 8719],["sum", 8721],["minus", 8722],["lowast", 8727],["radic", 8730],["prop", 8733],["infin", 8734], _
    ["ang", 8736],["and", 8743],["or", 8744],["cap", 8745],["cup", 8746],["int", 8747],["there4", 8756],["sim", 8764],["cong", 8773], _
    ["asymp", 8776],["ne", 8800],["equiv", 8801],["le", 8804],["ge", 8805],["sub", 8834],["sup", 8835],["nsub", 8836],["sube", 8838], _
    ["supe", 8839],["oplus", 8853],["otimes", 8855],["perp", 8869],["sdot", 8901],["lceil", 8968],["rceil", 8969],["lfloor", 8970],["rfloor", 8971], _
    ["lang", 10216],["rang", 10217],["loz", 9674],["spades", 9824],["clubs", 9827],["hearts", 9829],["diams", 9830]]

    [/autoit] [autoit][/autoit] [autoit]

    ; Dezimalform:
    $a_RegExp = StringRegExp($s_S, "&#(\d{2,4});", 3)
    If IsArray($a_RegExp) And Not @error Then
    For $i In $a_RegExp
    If Not $o_Dict.Exists("&#" & $i & ";") Then $o_Dict.Add("&#" & $i & ";", Number($i))
    Next
    EndIf
    ; Hexadezimalform:
    $a_RegExp = StringRegExp($s_S, "&#x([[:xdigit:]]{2,4});", 3)
    If IsArray($a_RegExp) And Not @error Then
    For $i In $a_RegExp
    If Not $o_Dict.Exists("&#x" & $i & ";") Then $o_Dict.Add("&#x" & $i & ";", Dec($i))
    Next
    EndIf
    ; Namensform:
    For $i = 0 To 252
    $s_T = "&" & $a_NameEnt[$i][0] & ";"
    If StringInStr($s_S, $s_T, 2) Then
    If Not $o_Dict.Exists($s_T) Then $o_Dict.Add($s_T, $a_NameEnt[$i][1])
    EndIf
    Next
    ; Ersetze die Codes durch ihr entsprechendes Zeichen:
    For $i In $o_Dict.Keys
    $s_S = StringReplace($s_S, $i, ChrW($o_Dict($i)))
    Next
    EndFunc ;==>_ConvertEntities

    [/autoit]
  • Vielen Dank schonmal an alle!!
    :)

    Edit: Funktionierte nicht :( Denn da war ein blöder Fehler: <font color="#0000FF"> wurde zu <font color="#0000FF"> und deshalb funzte mein Programm nicht!! Aber es funktioniert ja jetzt. Naja, leider ist es nicht schneller durch eure Funktionen, aber es wird kein IE benötigt und die Maus ändert nicht ihren Cursor in den Laden-Cursor. :)

    [autoit]


    Func Ulam($n)
    Return 1
    EndFunc

    [/autoit]


    Rekursion FTW :D

    2 Mal editiert, zuletzt von retrokid (4. Juni 2011 um 19:51)