Dobry den,

asi pred pol rokom som musela realizovat podobny projekt aky popisujete vy. 
Osvedcil sa mi JTidy (http://jtidy.sourceforge.net/)

Radovana Straube

--- On Fri, 2/18/11, Dušan Rychnovský <geraltzri...@gmail.com> wrote:

From: Dušan Rychnovský <geraltzri...@gmail.com>
Subject: Re: Parsing HTML stránek
To: "Java" <konference@java.cz>
Date: Friday, February 18, 2011, 1:31 PM


Ještě bych rád upřesnil, co přesně je mým cílem.

Programuju aplikaci, která na požádání stáhne webovou stránku (její kód) na 
disk a dále umožní provádět nad ní změny (např. přidat tagu CSS třídu, nebo ji 
naopak odebrat, atp.).


Snažím se to naprogramovat tak, že nejprve nad staženou stránkou vytvořím strom 
(DOM), ten pak můžu jednoduše upravovat. Nakonec vypíšu upravený HTML kód 
zpátky na disk do souboru pro následné zobrazení prohlížečem.


Problém s parserem, který jsem použil je, že vytvořený DOM strom neobsahuje sám 
o sobě všechny informace o HTML kódu, ale odkazuje se na části původního 
souboru. Proto se snažím vždy po každé změně stromu upravit zpátky i parsovaný 
soubor.


Aplikace bude malá, proto hledám pokud možno nějaký malý parser.

Děkuju

2011/2/18 Robert Novotny <robert.novo...@upjs.sk>



  
    
  
  
    Toto je nieco fakt velmi divne, ked to rozbije komplet subor.
    Pozeram, ze su kadejake bugy reportovane k tej metode. Htmlparser ma
    poslednu verziu z 2006, nechcete skusit fakt iny parser, lebo styri
    roky su styri roky? (Napr. validator.nu sa stale vyvija) Mozno vas
    este zaujme NekoHTML, ten sa da postavit ako filter pred Xerces.

    

    http://nekohtml.sourceforge.net/index.html

    

    On 18. 2. 2011 13:17, Dušan Rychnovský wrote:
    
      Když jsem si ještě jednou prohlédl přiložené soubory,
        uvědomil jsem si, že jsem zapomněl připsat: 
      

      
      Kusy značek a atributů ("news", <li>, ...) rozmístěné
        doprostřed kódu pocházejí z jiných částí parsované stránky.
        Celkově to působí, jakobych upravil parsovaný soubor beze změny
        uloženého DOMu a při jeho opětovném načtení se porušily odkazy
        do parsovaného souboru a proto je výsledkem takovýto "rozházený"
        soubor.

      
      

      
      Proto jsem se snažil najít místo, kde by došlo ke změně DOMu
        a zároveň neupravení původního dokumentu podle metody toHTML(),
        ale nenašel jsem takové.
      

      
      Dušan Rychnovský
      

      
      

      2011/2/18 Dušan Rychnovský <geraltzri...@gmail.com>

        
          Co znamena "velmi rozhozeny"?
          

          
          Podle vzniklého souboru lze poznat, že souvisí s původním
            souborem. Ale
          

          
          1. Má rozhozené kódování.
          2. Textový obsah i formátovací značky jsou porušené.
          

          
          Nedaří se mi situaci pořádně popsat, proto přikládám
            ukázku původního a vzniklého kódu.
          

          
          

          
          S tím, že k nějakým změnám kódu dojde (opravám kvůli
            převodu nonwellformed HTML do DOM) počítám. U mě však
            dochází ke znehodnocení celého kódu (viz přiložené soubory).
          

          
          Na odkázaný parser se určitě podívám, děkuju.
          

          
          Dušan Rychnovský
          

          
          

          
          

          2011/2/18 Ondrej Nekola <on...@nekola.cz>
            
              

                Co znamena "velmi rozhozeny"?

                  S pozdravem

                          Ondřej Nekola

                  

                  

                  

                  2011/2/18 Dušan Rychnovský <geraltzri...@gmail.com>:

                  
                    > Dobrý den.

                      >

                      > Vytvářím program (JSE), který zpracovává HTML
                      stránky. Stránku vždy stáhnu z

                      > webu na disk, vybuduju nad ní DOM Tree a
                      pomocí něj pak provádím různé

                      > úpravy.

                      >

                      > Pro stavbu DOM používám knihovnu "HTML
                      Parser"

                      > (http://htmlparser.sourceforge.net/),
                      a to z několika důvodů.

                      >

                      > 1. Potřebuju zpracovávat běžné webové stránky
                      (tj. stránky s chybami oproti

                      > XML standardům).

                      >

                      > 2. Potřebuju je zpracovávat rychle.

                      >

                      > 3. Změny v HTML kódu chci uchovávat i mezi
                      spuštěními programu - potřebuju

                      > DOM serializovat.

                      >

                      > Zjistil jsem, že "HTML Parser" při vytváření
                      stromu nekopíruje textové

                      > elementy do paměti, ale nějakým způsobem se
                      zřejmě odkazuje na části

                      > zparsovaného HTML souboru.

                      >

                      > Proto pokaždé, když provedu změnu v HTML
                      kódu, uložím na disk (serializuju)

                      > změněný DOM a přepíšu parsovaný HTML soubor
                      pomocí metody toHtml() třídy

                      > NodeList (aby si vždy DOM a parsovaná stránka
                      odpovídaly).

                      >

                      > Tento postup funguje v pořádku až do té doby,
                      než program vypnu a znovu

                      > zapnu (tj. zřejmě dokud neproběhne
                      deserializace DOMu). Potom dostávám při

                      > prvním volání toHtml() dokument velmi
                      rozhozený.

                      >

                      > Kontroloval jsem několikrát, jestli se někde
                      v průběhu nedostane dvojice DOM

                      > - parsovaný soubor do nekonzistentního stavu,
                      ale chybu jsem nenašel.

                      >

                      > Takže přemýšlím, jestli vůbec "HTML Parser"
                      takovéto zacházení podporuje

                      > (dokumentace je dost chudá).

                      >

                      > Máte někdo podobné zkušenosti s tímto
                      parserem? Nebo víte o vhodnějším

                      > parseru pro moje účely (vygooglil jsem i
                      různé jiné parsery, ale vždy se mi

                      > z nějakého důvodu zdály nevhodné)?

                      >

                      > Díky za pomoc,

                      > Dušan Rychnovský

                      >

                      >

                    
                  
                
              
            
          
          

        
      
      

    
    

  








Odpovedet emailem