Anzeige von "purem" Text von Webseiten

Startseite Foren Deutsches LiveCode-Forum Anzeige von "purem" Text von Webseiten

Schlagwörter: 

Ansicht von 7 Antwort-Themen
  • Autor
    Beiträge
    • #5672
      Torsten
      Teilnehmer

      Hi,

      ich möchte von einer Webseite nur den Teil haben, der den sichtbaren Text enthält, so wie der Lesemodus bei Firefox.
      Hat jemand eine Idee, wie man das machen könnte?

    • #5674
      Klaus Major
      Verwalter

      Hi Torsten,

      ich habe gestern im englischen Forum einen entsprechencden Tip abgegeben:
      http://forums.livecode.com/viewtopic.php?f=7&t=30726&start=45#p167557

      1. Webpage in einem Browser Widget laden (sichtbar oder unsichbar, also das Widget)
      2. Dann folgendes Skript laufen lassen:

      ...
      set the htmltext of the templatefield to the htmltext of widget "Browser"
      put the text of the templatefield into fld "PlainText"
      
      ## Important to avoid surprises when creating a new field later!
      ## Although I think hte IDE also takes care of that.
      reset the templatefield
      ...

      Aber Vorsicht, LC unterstützt nur einen Bruchteil des HTML-Sets, CSS etc. könnte also auch als „reiner“ Text dargestellt werden!

      Gruß

      Klaus

    • #5676
      Torsten
      Teilnehmer

      Hi Klaus,
      ja, ne, bei komplexeren Seiten wie z.B. http://www.spiegel.de geht es nicht.
      Wie kann man den den ganzen anderen Müll raus-strippen?

    • #5678
      Klaus Major
      Verwalter

      Du wirst den Quellcode komplett manuell „parsen“ müssen.
      Vielleicht hilft RegEx, aber das ist nicht meine Welt…

    • #5680
      Torsten
      Teilnehmer

      Alles klar, dann also auf die harte Tour 🙂

      Wenn ich was Pfiffiges finde, poste ich es hier.

    • #5684
      hauke
      Verwalter

      Hier ein kleines Puzzleteil, das ich mal verwendet habe, um den eigentlichen Text aus HTML-Dateien rauszukriegen. Allerdings werden hier keine scripts und styles entfernt, sondern nur alle HTML-Tags und Formatierungsangaben:

      
      function replacetags tx
         return replaceText(tx,"<[^<]+>",empty)
      end replacetags		

      Sehr simpel, aber macht den Basisjob. Du müsstest aber noch „manuell“ parsen, um den Hauptteil der Seite zu separieren.

      Grüße

      Hauke

    • #5686
      Torsten
      Teilnehmer

      Jou, ein paar kreative Stunden und es ist geschafft: hier der Text-Extraktor für Artikel von SPIEGEL ONLINE.

      Die Funktion für removeHTML hatte ich auch schon mal gefunden, die ist wirklich sehr nützlich. Die Funktion selectString habe ich selbst geschrieben.

      Vorraussetzung:
      * Browser-Widget mit Namen „SPONBrowser“, der als url eine URL eines Spiegel-Artikels hat (am besten die Homepage als Start und einen Artikel laden)
      * Field mit Namen „PlainText“
      * das folgende Script in einen Button einfügen

      Zum direkten Ausprobieren diese Zeile einfach in die Messagebox einfügen 🙂
      go to stack url "http://torstenholmer.bplaced.net/livecode_stacks/SPON-Text-Extraktor.livecode"

      
      function removeHTML pString  
         
         #  Gibt einen String ohne Tags zurück
         
         return replaceText(pString,"<[^<]+>",empty)
         
      end removeHTML
      
      function selectString pText, pStartString, pEndString  
         
         # Gibt den Text zwischen Start- und Endstring zurück
         
         set itemdelimiter to pStartString
         put item 2 of pText into pText
         set itemdelimiter to pEndString
         put item 1 of pText into pText
         return pText
      end selectString
      
      on mouseUp
         
         set the cursor to watch
         put empty into field "PlainText"
         put the htmltext of widget "SPONBrowser" into tText
         
         # Bereinigen des Textes
         
         replace tab with empty in tText
         replace "&nbsp;" with space in tText
         
         # Extrahiere dieTiteltexte zwischen <h1 und </h1> 
         
         put selectString(tText, "<h1 class=" & quote &"so-hdln" & quote & ">", "</h1>")  into tSnippet
         put removeHTML(tSnippet) & cr & cr  after tPureText
         
         
         # Extrahiere Titel-Unterschriften zwischen <h2> und </h2> 
         
         put "<" & selectString(tText, "<h2", "</h2>") into tSnippet
         put removeHTML(tSnippet) & cr & cr  after tPureText
         
         
         # Extrahiere Artikel-Intro-Text
         
         set itemdelimiter to "<p class=" & quote & "article-intro" & quote & ">" 
         repeat with i = 2 to the number of items of tText
            
            put selectString(item i of tText, "<strong>", "</p>")  into tSnippet
            put removeHTML(tSnippet) & cr & cr  after tPureText
            
         end repeat
         
         
         # Extrahiere Autoren-Info
         
         put "Von" && selectString(tText, "rel=" & quote & "author" & quote & ">" , "</a>") into tAuthor
         if tAuthor is not empty then put tAuthor & cr & cr after tPureText
         
         
         # Extrahiere die "normalen" Texte zwischen <p> und </p> 
         
         set itemdelimiter to "<p>"
         repeat with i = 2 to the number of items of tText
            
            put "<p>" & item i of tText into tSnippet
            put selectString(tSnippet, "<p>", "</p>")  into tSnippet
            put removeHTML(tSnippet) & cr & cr  after tPureText
            
         end repeat
         
         # Entfernen von leeren Doppelzeilen
         
         repeat while tPureText contains cr & cr & cr
            replace cr & cr & cr with cr & cr in tPureText
         end repeat
         
         put tPureText into fld "PlainText"
         set the cursor to arrow
         
      end mouseUp
      
    • #5688
      hauke
      Verwalter

      Hallo Torsten,

      cool – da ist wirklich was Nützliches bei herausgekommen. Danke fürs Teilen!

      Hauke

Ansicht von 7 Antwort-Themen
  • Du musst angemeldet sein, um auf dieses Thema antworten zu können.