🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.tcl
11 messages
11 total messages Started by Miszczu Fri, 07 Oct 2005 15:11
parsowanie stron www
#184
Author: Miszczu
Date: Fri, 07 Oct 2005 15:11
7 lines
1003 bytes
Probuje napisac pareser stron www, mam jednak maly klopot, czy istnieje
jakis prosty sposob zeby z danego kawalka strony pozbyc sie wszystkich
znacznikow html typu <b> <p> <a href...> itp itd

Fajnie by bylo gdybym mogl to zrobic np poprzez
string map { <*> "" } $zrodlo
Ale jakos nie dziala ;)
Re: parsowanie stron www
#185
Author: Derek Kuliński / takeda
Date: Fri, 07 Oct 2005 18:09
18 lines
1830 bytes
On Fri, 07 Oct 2005 15:11:23 +0000, Miszczu wrote:

> Probuje napisac pareser stron www, mam jednak maly klopot, czy istnieje
> jakis prosty sposob zeby z danego kawalka strony pozbyc sie wszystkich
> znacznikow html typu <b> <p> <a href...> itp itd
> 
> Fajnie by bylo gdybym mogl to zrobic np poprzez
> string map { <*> "" } $zrodlo
> Ale jakos nie dziala ;)

Ja kiedyś potrzebowałem coś takiego zrobić (w skrypcie do wysyłania smsów)
i pozbyłem się ich poprzez polecenie regsub. Ale nie wiem czy to najlepsze
rozwiązanie w tej sytuacji.

-- 
ダレック
takeda@IRCnet.EFnet, ICQ# 15827691, YahooIM: takeda64
http://ircwiki.takeda.tk - strona wiki poświęcona IRC
Re: parsowanie stron www
#186
Author: Derek Kuliński / takeda
Date: Sat, 08 Oct 2005 23:01
20 lines
1981 bytes
On Fri, 7 Oct 2005 11:09:13 -0700, Derek Kuliński / takeda wrote:

> Ja kiedyś potrzebowałem coś takiego zrobić (w skrypcie do wysyłania smsów)
> i pozbyłem się ich poprzez polecenie regsub. Ale nie wiem czy to najlepsze
> rozwiązanie w tej sytuacji.

Ok w czeluściach swojego HD znalazłem ten skrypt. Jest b. stary dawno nie
uaktualniany, więc wątpię czy nawet wysyła sms'y (te polskie brami lubiały
b. często zmieniać swoje interfejsy).

http://www.takeda.tk/site/download/eggdrop/tkdSMS.tar.gz

Pewnie rozwiązanie nie jest najlepsze ale wtedy nie było tej grupy więc
rozwiązanie zrobiłem we własnym zakresie. Ciebie pewnie bedzie interesować
procedura striphtml.

-- 
ダレック
takeda@IRCnet.EFnet, ICQ# 15827691, YahooIM: takeda64
http://ircwiki.takeda.tk - strona wiki poświęcona IRC
Re: parsowanie stron www
#189
Author: Miszczu
Date: Sat, 08 Oct 2005 23:25
23 lines
1977 bytes
Googie wrote:

> Derek Kuliński / takeda wrote:
> 
>> Ja kiedyś potrzebowałem coś takiego zrobić (w skrypcie do wysyłania
>> smsów) i pozbyłem się ich poprzez polecenie regsub. Ale nie wiem czy
>> to najlepsze rozwiązanie w tej sytuacji.
>> 
> 
> [regsub] byłby najlepszy. W ogóle wyrażenia regularne są bardzo pomocne
> i szybkie (chyba najszybsze z wszystkich innych metod, jakimi można je
> ewentualnie zastąpić). Niestety jestem teraz zbyt zmęczony na
> wymyślanie jak ta komenda w całości ma wyglądać - postaram się jutro.
> Można też na piechotkę, w pętli, znak po znaku, ale nie poleca, bo nie
> dość że 10 razy więcej roboty, kodu ( = 10 razy więcej możliwości
> popełnienia błędu), to jeszcze na pewno wolniejsze (a zwłaszcza przy
> większych stringach).
> 
Kombinowalem z regsub, ale jakos nie moglem sobie z nim poradzic, prosil bym
o niepisanie gotowych procedur, tylko o ewentualnie podpowiedzenie w ktorym
kierunku mam isc. Co do likwidowania znak po znaku, to tez nie bardzo sie
da, bo nie znam z gory wszystkich znacznikow :)
Z gory dziekuje i pozdrawiam
Re: parsowanie stron www
#188
Author: Googie
Date: Sat, 08 Oct 2005 23:25
19 lines
1627 bytes
Derek Kuliński / takeda wrote:

> Ja kiedyś potrzebowałem coś takiego zrobić (w skrypcie do wysyłania
> smsów) i pozbyłem się ich poprzez polecenie regsub. Ale nie wiem czy
> to najlepsze rozwiązanie w tej sytuacji.
> 

[regsub] byłby najlepszy. W ogóle wyrażenia regularne są bardzo pomocne
i szybkie (chyba najszybsze z wszystkich innych metod, jakimi można je
ewentualnie zastąpić). Niestety jestem teraz zbyt zmęczony na
wymyślanie jak ta komenda w całości ma wyglądać - postaram się jutro.
Można też na piechotkę, w pętli, znak po znaku, ale nie poleca, bo nie
dość że 10 razy więcej roboty, kodu ( = 10 razy więcej możliwości
popełnienia błędu), to jeszcze na pewno wolniejsze (a zwłaszcza przy
większych stringach).

-- 
Pozdrawiam (Greetings)!
Googie
Re: parsowanie stron www
#190
Author: Googie
Date: Sat, 08 Oct 2005 23:32
39 lines
2014 bytes
Miszczu wrote:

> Kombinowalem z regsub, ale jakos nie moglem sobie z nim poradzic,
> prosil bym o niepisanie gotowych procedur, tylko o ewentualnie
> podpowiedzenie w ktorym kierunku mam isc.

Jutro, sam muszę to przetestować (rzadko używam [regsub]).

> Co do likwidowania znak po 
> znaku, to tez nie bardzo sie da, bo nie znam z gory wszystkich
> znacznikow :)

Nie. Robisz pętlę dla każdego znaku, w jeden z 2 sposobów:

for {set i 0} {[string index $string $i] != ""} {incr i} {
    set char [string index $string $i]
    #...
}

lub

foreach char [split $string ""] {
    #....
}

(ten split rozdziela wszystko - co jeden znak)

W takiej pętli robisz switcha, dla przypadków "<", ">" i default.
Następnie używasz zmiennej sterującej 'isTag' dając jej wartości 0 lub
1, w zależności od tego czy pętla jest aktualnie w tagu html czy w
zwykłym tekście (a to wykrywasz po znakach < i >). W default
sprawdzasz wartość 'isTag' i w zależności od tego dodajesz bierzący
znak do stringa końcowego, lub nie.

Mam nadzieję że wyjaśniłem zrozumiale.

-- 
Pozdrawiam (Greetings)!
Googie
Re: parsowanie stron www
#191
Author: Artur
Date: Mon, 10 Oct 2005 08:23
33 lines
2043 bytes
Miszczu schrieb:

> Probuje napisac pareser stron www, mam jednak maly klopot, czy istnieje
> jakis prosty sposob zeby z danego kawalka strony pozbyc sie wszystkich
> znacznikow html typu <b> <p> <a href...> itp itd
>
> Fajnie by bylo gdybym mogl to zrobic np poprzez
> string map { <*> "" } $zrodlo
> Ale jakos nie dziala ;)

# Można użyć też tDOM z opcją do HTML o ile to uważa się za
prosty spośób
# http://www.tdom.org

package require tdom
set f [open "my.html" r]
set document [dom parse -html [read $f]]
close $f

# remove all p nodes
foreach node [[$document documentElement] selectNodes */p] {
     # transfer child nodes of p to parent
     foreach c [$node childNodes] {
	 [$node parentNode] insertBefore $c $node
     }
     [$node parentNode] removeChild $node
}

set f [open "my2.html" w]
puts -nonewline $f [[$document documentElement] asHTML]
close $f

# Artur Trzewik
Re: parsowanie stron www
#192
Author: Wojciech Kocjan
Date: Wed, 12 Oct 2005 06:31
14 lines
1316 bytes
On Fri, 07 Oct 2005 17:11:23 +0200, Miszczu <Miszczu@ble.ble> wrote:

> Probuje napisac pareser stron www, mam jednak maly klopot, czy istnieje
> jakis prosty sposob zeby z danego kawalka strony pozbyc sie wszystkich
> znacznikow html typu <b> <p> <a href...> itp itd
>
> Fajnie by bylo gdybym mogl to zrobic np poprzez
> string map { <*> "" } $zrodlo
> Ale jakos nie dziala ;)

regsub -all "<.*?>" $zrodlo "" zrodlo

-- 
Using Opera's revolutionary e-mail client: http://www.opera.com/mail/
Re: parsowanie stron www
#187
Author: Wojciech Kocjan
Date: Wed, 12 Oct 2005 06:43
64 lines
3033 bytes
On Sun, 09 Oct 2005 01:01:53 +0200, Derek Kuliński / takeda  
<d.kulinski@gmail.com> wrote:

> On Fri, 7 Oct 2005 11:09:13 -0700, Derek Kuliński / takeda wrote:
>
>> Ja kiedyś potrzebowałem coś takiego zrobić (w skrypcie do wysyłania  
>> smsów)
>> i pozbyłem się ich poprzez polecenie regsub. Ale nie wiem czy to  
>> najlepsze
>> rozwiązanie w tej sytuacji.
>
> Ok w czeluściach swojego HD znalazłem ten skrypt. Jest b. stary dawno nie
> uaktualniany, więc wątpię czy nawet wysyła sms'y (te polskie brami  
> lubiały
> b. często zmieniać swoje interfejsy).

Ja mam troche inaczej, bez parsowania, taki prosty moduł do SMSów. Do  
botów się kiepsko nadaje, chociaż podobno już można http::geturl z  
-command wywołać, nie jestem w temacie.

Szukam naiwn^H^H^H^H^H^H zainteresowanego przerobieniem bramki ery. Nowy  
Orange (trzeba zdefiniować callback, który dostaje token w postaci  
binarnej) i stary dobry Plus działa. Ery mi się nie chce już dorabiać, a  
chętnie bym na nią wysyłał.

> http://www.takeda.tk/site/download/eggdrop/tkdSMS.tar.gz
> Pewnie rozwiązanie nie jest najlepsze ale wtedy nie było tej grupy więc
> rozwiązanie zrobiłem we własnym zakresie. Ciebie pewnie bedzie  
> interesować
> procedura striphtml.

Akurat ns_striphtml z AOLservera wygląda podobnie:

::nstcl::ad_proc ::nstcl::ns_striphtml {-tags_only:boolean html} {
     summary "Strip HTML tags"

     description {
         <p><i>ns_striphtml</i> removes all HTML tags from a given chunk of
         <i>html</i>.</p>
     }

     optional_switch {
         <dle>
             <dt><option>-tags_only</option></dt>
             <dd>
                 If specified HTML entities are not removed; if not  
specified,
                 they are.
             </dd>
         </dle>
     }
} {
     regsub -all -- {<[^>]+>} $html "" html
     if {!$tags_only_p} {
         regsub -all -- {&[^ \t\n\r;]+;} $html "" html
     }
     return $html
}


Przy okazji macie opis o tags_only_p ;-)

-- 
Using Opera's revolutionary e-mail client: http://www.opera.com/mail/
Re: parsowanie stron www
#193
Author: Googie
Date: Wed, 12 Oct 2005 07:06
9 lines
1050 bytes
> regsub -all "<.*?>" $zrodlo "" zrodlo

regsub -all "<.+>" $zrodlo "" zrodlo

Czy to nie bedzie czasem to samo?

-- 
Pozdrawiam!
Googie
Re: parsowanie stron www
#194
Author: Derek Kuliński / takeda
Date: Wed, 12 Oct 2005 07:47
19 lines
1671 bytes
On Wed, 12 Oct 2005 09:06:15 +0200, Googie wrote:

>> regsub -all "<.*?>" $zrodlo "" zrodlo
> 
> regsub -all "<.+>" $zrodlo "" zrodlo
> 
> Czy to nie bedzie czasem to samo?

Googie musiałdodać swoje 3gr, ok to ja też dorzucę:

Nie lepiej będzie:
regsub -all {<.+>} $zrodlo {} zrodlo

właściwie to AFAIR manual Tcl tak zaleca (chodzi o klamry)...

-- 
ダレック
takeda@IRCnet.EFnet, ICQ# 15827691, YahooIM: takeda64
http://ircwiki.takeda.tk - strona wiki poświęcona IRC
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads