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)
?
Text aus Htmlcode filtern...
-
- [ offen ]
-
team2way -
8. April 2009 um 01:31 -
Geschlossen -
Erledigt
-
-
du kanns im quellcode suchen nach dem tag wo der text drinsteht,
[autoit]
dann mit_IEBodyReadHtml()
[/autoit]
[autoit]
den code auslesen und dann
[/autoit]
StringSplit() ;oder
_StringBetween() ;mit anfangstag, z.b. <div name="irgendwas"> und endtag </div>
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 ... )Denn Body Text erst mit _Stringbetween oder RegEx herausfiltern und dann die HTML-Tags.
[autoit]
HTML-Tag-Filter mit RegEx:$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 machenwie muss ich dieses script jetzt noch erweitern so dass nur der leittext zu sehn ist?
Spoiler anzeigen
[autoit]$open = FileOpenDialog("","","All (*.*)")
[/autoit]
$file = FileRead($open)
$sString = StringRegExpReplace($file, "<[^>]*>", "")
MsgBox(0,"",$sString)
wie müssen die befehle hier eingebaut werden
_IEBodyReadHtml()
StringSplit() ;oder
_StringBetween() ;thx schon mal team2way
-
Was genau meinst du mit Leittext?
Wenn du die Seite eh mit FileRead liest kannst du diese IE-Funktionen (IEReadHTML ...) weglassen.
-
ahh ok...und wie sieht dieses _StringBetween() aus?
was sind da nun die genauen angaben - stimmt das so?Zitat[autoit]$open = FileOpenDialog("","","All (*.*)")
[/autoit]
$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) -
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? -
was kommt für das "irgendwas" rein?
bei den wikipedia seiten hab ich diesesn string mit div="name auch nich gefunden.. was nun?Wie was nun? Weis ich auch nicht, du hast doch dieses Beispiel mit "<div .... " gebracht:
[ offen ] Text aus Htmlcode filtern...Bei Wikipedia würde ich einfach einfach mal alles zwischen "<!-- start content -->" und "<!-- end content -->" herausnehmen.
-
Stilgar ich hab das beispiel nicht gebraucht es war syne...
ZitatBei 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 textinhaltes 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 ...
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")
[/autoit]
$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)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".
-
danke