Portál AbcLinuxu, 9. května 2025 22:50

Dotaz: Parsovani (Bash)

31.5.2011 09:48 JK
Parsovani (Bash)
Přečteno: 754×
Odpovědět | Admin
Příloha:
Dobry den,

Mam v pc odkaz www stranky( viz. priloha ), ktera se aktualizuje kazdou hodinu. Je to odkaz na predpoved pocasi a potreboval bych z toho jenom vyriznout. DEN A TEPLOTU. Ze zdrojoveho kodu.

Dekuju moc
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

31.5.2011 12:49 ph0enix | skóre: 18 | Praha
Rozbalit Rozbalit vše Re: Parsovani (Bash)
Odpovědět | | Sbalit | Link | Blokovat | Admin
Z jakeho duvodu to ma byt v shellu? Bude to priserve pomale a spatne se s tim bude pracovat. Radeji bych volil nejaky vyssi jazyk - Perl, Python, ...
31.5.2011 13:03 Fešák Hubert
Rozbalit Rozbalit vše Re: Parsovani (Bash)
Jinak to cvicici neuzna:)
31.5.2011 14:29 ph0enix | skóre: 18 | Praha
Rozbalit Rozbalit vše Re: Parsovani (Bash)
Takze domaci ukol :-) Muzes ukazat co mas hotove na cem se da stavet, nebo kde je problem?
31.5.2011 18:47 ph0enix | skóre: 18 | Praha
Rozbalit Rozbalit vše Re: Parsovani (Bash)
man wget man bash man sed
INFILE="http://adresa/dokument.html"

wget -O - $INFILE | (
    # nejake promenne jenz mozna budeme potrebovat
    PROMENNA=
    ...
    
    while read LINE; do
        # budeme hledat pozadovana data a na zaklade jejich vyskytu neco podnikneme
        echo $LINE | grep -q 'co hledame'
        if [ $? -eq 0 ]; then
            # nalezeno - neco udelame
            ...
        else
            # nenalezeno - delej neco jineho
            ...
        fi
        ...
        
        # popripade si i neco updavime a zapamatujeme
        PROMENNA=`echo $LINE | sed -e 's/vzor/substituce/'`
        ...
        
        # a mozna i neco vypiseme
        printf "vystup"
    done
    )
1.6.2011 18:45 ph0enix | skóre: 18 | Praha
Rozbalit Rozbalit vše Re: Parsovani (Bash)
Nez shell, to uz bych to radeji napsal v awk. Ikdyz nejelegantnejsi je, diky velmi dobre podpore regularnich vyrazu, reseni v PERLu prezentavane jiz v reakcich na tvuj predchozi dotaz.

Tady mas bastl v shellu. Diky zpracovani po radcich to bude neskutecne poommmaaaallllleeeeee. Dej si alepon praci s tim pochopit co ktera cast dela nez to budes chtit prezentovat jako svuj vytvor :-(
#!/usr/bin/bash
#

INFILE="http://www.abclinuxu.cz/data/prilohy/9/9/175399-pocasi-1837466145685031135.html"

wget -O - $INFILE | (
    INDAY=0

    while read LINE; do
        if [ $INDAY -eq 1 ]; then
            if [ $PART -eq 0 ]; then
                echo $LINE | grep -q 'div class="cLeft"'
                if [ $? -eq 0 ]; then
                    PART=1
                else
                    DAY=`echo $LINE | sed -e 's/.*<h4>\(.*\)<\/h4>.*/\1/'`
                fi
            else
                if [ $PART -eq 1 ]; then
                    echo $LINE | grep -q 'div class="cRight"'
                    if [ $? -eq 0 ]; then
                        PART=2
                    else
                        echo $LINE | grep -q ' title="'
                        if [ $? -eq 0 ]; then
                            DOP_TYP=`echo $LINE | sed -e 's/.* title="\(.*\)" .*/\1/'`
                        else
                            echo $LINE | grep -q '<p>.*<\/p>'
                            if [ $? -eq 0 ]; then
                                DOP_TEMP=`echo $LINE | sed -e 's/.*<p>\(.*\)<\/p>.*/\1/'`
                            else
                                echo $LINE | grep -q '>.*<\/a><'
                                if [ $? -eq 0 ]; then
                                    DOP_LABEL=`echo $LINE | sed -e 's/.*>\(.*\)<\/a><br.*/\1/'`
                                fi
                            fi
                        fi
                    fi
                else
                    echo $LINE | grep -q '<\/div>'
                    if [ $? -eq 0 ]; then
                        printf "[$DAY]\n"
                        printf "\t$DOP_LABEL - $DOP_TYP - $DOP_TEMP\n"
                        printf "\t$ODP_LABEL - $ODP_TYP - $ODP_TEMP\n"
                        INDAY=0
                        PART=0
                        DAY=
                        DOP_LABEL=
                        DOP_TYP=
                        DOP_TEMP=
                        ODP_LABEL=
                        ODP_TYP=
                        ODP_TEMP=
                    else
                        echo $LINE | grep -q ' title="'
                        if [ $? -eq 0 ]; then
                            ODP_TYP=`echo $LINE | sed -e 's/.* title="\(.*\)" .*/\1/'`
                        else
                            echo $LINE | grep -q '<p>.*<\/p>'
                            if [ $? -eq 0 ]; then
                                ODP_TEMP=`echo $LINE | sed -e 's/.*<p>\(.*\)<\/p>.*/\1/'`
                            else
                                echo $LINE | grep -q '>.*<\/a><'
                                if [ $? -eq 0 ]; then
                                    ODP_LABEL=`echo $LINE | sed -e 's/.*>\(.*\)<\/a><br.*/\1/'`
                                fi
                            fi
                        fi
                    fi
                fi
            fi
        else
            echo $LINE | grep -q 'div class="cDay"'
            if [ $? = 0 ]; then
                INDAY=1
                PART=0
                DAY=
                DOP_LABEL=
                DOP_TYP=
                DOP_TEMP=
                ODP_LABEL=
                ODP_TYP=
                ODP_TEMP=
            fi
        fi
    done
    )
31.5.2011 14:01 Ash | skóre: 53
Rozbalit Rozbalit vše Re: Parsovani (Bash)
Odpovědět | | Sbalit | Link | Blokovat | Admin
Vy jste to za ten týden ještě nevyřešil? V tom případě ukažte kam jste dospěl (zdrojový kód) a nějak to už doladíme. Předpokládám že alespoň pár řádek jste napsal... Víte už jakým nástrojem to budete dělat? V Bash budete potřebovat něco na stažení, asi wget, potom něco na parsování, třeba sed nebo awk.

Znáte některý z těchto nástrojů? Víte jak se v bash předávají data mezi jednotlivými nástroji? Pro jednoduchost vám doporučuji stáhnout stránku wgetem, a následně parsovat stažený soubor. Až nebudete vědět jak dál, podělte se o váš výsledek.
31.5.2011 14:32 NN
Rozbalit Rozbalit vše Re: Parsovani (Bash)
Vy jste to za ten týden ještě nevyřešil?
lol
1.6.2011 09:49 NeoV | skóre: 23
Rozbalit Rozbalit vše Re: Parsovani (Bash)
No, chalan ten isty dotaz uz zadaval 25.5. :-) ==>

http://www.abclinuxu.cz/poradna/linux/show/336314

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.