Text aus Htmlcode filtern...

  • hi,
    wie kann man text aus einem html script rausfiltern.
    beispiel: ich habe eine html script von einer wikipedia seite und will nur den text in einer msgbox angeben...
    (mit text meine ich den text den man auf der seite zu einem bestimmten thema lesen kann)
    ?

  • du kanns im quellcode suchen nach dem tag wo der text drinsteht,
    dann mit

    [autoit]

    _IEBodyReadHtml()

    [/autoit]


    den code auslesen und dann

    [autoit]


    StringSplit() ;oder
    _StringBetween() ;mit anfangstag, z.b. <div name="irgendwas"> und endtag </div>

    [/autoit]


    anwenden dnek ich..

  • Hallo,

    nimm doch einfach die Druckversion der Artikel z.B.:
    http://de.wikipedia.org/w/index.php?title=Calitor&printable=yes
    mit InetGet herunterladen und dann filtern (sieht zwar bescheiden aus ohne Formatierung, aber für ne Messagebox ... :D )

    Denn Body Text erst mit _Stringbetween oder RegEx herausfiltern und dann die HTML-Tags.
    HTML-Tag-Filter mit RegEx:

    [autoit]

    $sString = StringRegExpReplace($sString, "<[^>]*>", "")

    [/autoit]


    Grüße
    Stilgar

  • Zitat

    nimm doch einfach die Druckversion der Artikel z.B.:


    wikipedia war nur ein beispiel, will das auch bei anderen seiten machen

    wie muss ich dieses script jetzt noch erweitern so dass nur der leittext zu sehn ist?

    Spoiler anzeigen
    [autoit]

    $open = FileOpenDialog("","","All (*.*)")
    $file = FileRead($open)
    $sString = StringRegExpReplace($file, "<[^>]*>", "")
    MsgBox(0,"",$sString)

    [/autoit]


    wie müssen die befehle hier eingebaut werden
    _IEBodyReadHtml()
    StringSplit() ;oder
    _StringBetween() ;

    thx schon mal team2way

  • ahh ok...und wie sieht dieses _StringBetween() aus?
    was sind da nun die genauen angaben - stimmt das so?

    Zitat
    [autoit]

    $open = FileOpenDialog("","","All (*.*)")
    $file = FileRead($open)
    _StringBetween($file, '<div name="irgendwas">,'</div>') ;was setzte ich für "irgendwas" ein...oder geht das auch so???
    ;$sString = StringRegExpReplace($file, "<[^>]*>", "") das braucht man dann ja auch nicht ^^
    MsgBox(0,"",$sString)

    [/autoit]

    2 Mal editiert, zuletzt von team2way (8. April 2009 um 12:45)

  • Du brauchst auch StringRegExpReplace sonst landen alle Tags zur Formatierung in deiner MsgBox.

    Bei _StringBetween - da trübt sich meine Kristallkugel - kommt auf die Seite drauf an.

    (ist eh ein Fehler drin:

    [autoit]

    _StringBetween($file, '<div name="irgendwas">','</div>')

    [/autoit]

    )

  • was kommt für das "irgendwas" rein?
    bei den wikipedia seiten hab ich diesesn string mit div="name auch nich gefunden.. was nun?

  • Stilgar ich hab das beispiel nicht gebraucht es war syne...

    Zitat

    Bei Wikipedia würde ich einfach einfach mal alles zwischen "<!-- start content -->" und "<!-- end content -->" herausnehmen.


    es geht mir aber nicht nur um wikipedia (das war nur ein beispiel)...
    es geht mir allg um internetseiten mit textinhalt

    es soll so sein: man hat eine html seite mit text und filtert aus dieser den text heraus geht das für alle seiten?

    mfg team2way

  • Na gut, die Ergebnisse werden stellenweise grausig aussehen :D ...

    Aber Endeffekt brauchst du für jede Seite ein angepaßtes Programm, wo du vorher den paßenden Bereich herausliest.

    Etwas umständlich geschrieben (zum erklären):

    Spoiler anzeigen
    [autoit]

    $sHTML = _INetGetSource("http://de.wikipedia.org/w/index.php?title=Calitor&printable=yes")
    $sHTML = StringReplace($sHTML,@crlf ,"")
    $sHTML = StringReplace($sHTML,"<br>",@crlf) ; Zeilenumbrüche wandeln
    $sHTML = StringReplace($sHTML,"<p>",@crlf & @crlf) ; Zeilenumbrüche wandeln
    $sHTML = StringRegExpReplace($sHTML, "<[^>]*>", "") ; Tags entfernen
    $sHTML = StringRegExpReplace($sHTML, "[[:blank:]]+", " ") ; Doppelte Leerzeichen entfernen
    $sHTML = StringRegExpReplace($sHTML, "[[:blank:]]+\n", "") ; ; Leerzeichen in leeren Zeilen entfernen
    $sHTML = StringRegExpReplace($sHTML, "([ \t]*[\n\r]+[ \t]*)", @CRLF) ; doppelte Zeilenumbrüche löschen
    MsgBox(64,"",$sHTML)

    [/autoit]

    oder halt über _IEBodyReadText, dann hast du zwar keine Tags mehr drin, aber filtern mußt du auch noch, oder mit _FFReadText(6) dann gibts nen relativ sauberen Text, aber alles nicht unbedingt "gebrauchsfertig".