Vilken HTML parser använder ni?

Diskussion i 'Frågor, support och diskussion' startad av Dalla, 7 mar 2011.

  1. Dalla

    Dalla Youth Droid Medlem

    Blev medlem:
    1 maj 2010
    Inlägg:
    145
    Mottagna gillanden:
    3

    MINA ENHETER

    Ja som topic säger så funderar jag lite på vilken HTML parser ni använder (om någon) i era appar. Jag har googlat runt en hel del och kollat t.ex. HTML-cleaner som många verkar rekommendera. Men den förefaller vara löjligt långsam. Om jag ska parsa en sida på 50 kb så tar det dryga 20 sekunder att bara köra clean-metoden som alltid måste köras.

    Är det bättre att skriva en egen parser för exakt det som behöver göras?
     
  2. Reconnnn

    Reconnnn Professional Droid Hedersmedlem

    Blev medlem:
    9 mar 2010
    Inlägg:
    2 809
    Mottagna gillanden:
    263

    MINA ENHETER

    Jag skriver alltid eget. Så vet jag vad som händer och vad som är långsamt.
     
  3. antepante

    antepante Baby Droid Medlem

    Blev medlem:
    20 jun 2010
    Inlägg:
    18
    Mottagna gillanden:
    0

    MINA ENHETER

    Jsoup är rätt så trevligt, annars kör jag med xpath :)

    Sent from my Desire HD using Tapatalk
     
  4. Zooklubba

    Zooklubba Android Medlem

    Blev medlem:
    10 jul 2010
    Inlägg:
    6 448
    Mottagna gillanden:
    2 199

    MINA ENHETER

    Htmlcleaner eller skriva eget, det gör jag i alla fall. Så segt har jag dock inte uppfattat Htmlcleaner.

    Sent from my HTC Desire using Tapatalk
     
  5. Dalla

    Dalla Youth Droid Medlem

    Blev medlem:
    1 maj 2010
    Inlägg:
    145
    Mottagna gillanden:
    3

    MINA ENHETER

    Den data jag vill parsa finns på
    http://schema.sthlm.friskissvettis.se/index.php?func=la

    Som synes så är det en relativt stor datamängd, sidan är på knappa 800 kb.
    Det tar ju sin lilla stund att gå igenom förstås. Tror ni att det ens är görbart inom "rimlig tid" på en telefon ?
     
  6. Kaj

    Kaj Senior Droid Medlem

    Blev medlem:
    12 jun 2009
    Inlägg:
    1 768
    Mottagna gillanden:
    44

    MINA ENHETER

    Att gå igenom datat bör inte ta lång tid. Att hämta datat kan ta rätt lång tid beroende på vilken uppkopplingshastighet telefonen får.

    Kollade headern som vanliga browsern skickar, och den säger att den gärna tar datat komprimerat, men det skiter sajten gladeligen i. :(
     
  7. Dalla

    Dalla Youth Droid Medlem

    Blev medlem:
    1 maj 2010
    Inlägg:
    145
    Mottagna gillanden:
    3

    MINA ENHETER

    Jag gillar xpath också vanligtvis, men när jag testade det på denna sidan så fick jag ett exception som verkade bero på att sidan inte var well-formed o_O

    Vet att jag har använt HTML cleaner förut och har inte upplevt det som segt då heller. Men när jag kör sidan som jag länkade i posten ovan så tar det ändå alldelles för lång tid att köra .clean(), och då har ju inte ens jag börjat parsa ut det jag skall ha ännu.
     
  8. Kaj

    Kaj Senior Droid Medlem

    Blev medlem:
    12 jun 2009
    Inlägg:
    1 768
    Mottagna gillanden:
    44

    MINA ENHETER

    Sidan ser ut att vara rätt lätt att parsa med regexp och Scanner-klassen (om det nu är så att den inte är well formed och andra parsers inte kan användas)
     
  9. Dalla

    Dalla Youth Droid Medlem

    Blev medlem:
    1 maj 2010
    Inlägg:
    145
    Mottagna gillanden:
    3

    MINA ENHETER

    Scanner-klassen kände jag inte till ens, får kolla på den. Tack för tipset :-)

    Testade på kul att ta tid på HTML cleaner med följande enkla kod.

    Kod:
    long timeGet = SystemClock.elapsedRealtime();
    DefaultHttpClient client = HttpClientFactory.getThreadSafeClient();
    HttpGet httpGet = new HttpGet(FS_BOOKINGS_ADDRESS);
    try {
    	HttpResponse response = client.execute(httpGet);
    	Log.d("time",String.valueOf(SystemClock.elapsedRealtime() - timeGet));
    	long timeClean = SystemClock.elapsedRealtime();
    	HtmlCleaner cleaner = new HtmlCleaner();
    	CleanerProperties props = cleaner.getProperties();
    	props.setAllowHtmlInsideAttributes(true);
    	props.setAllowMultiWordAttributes(true);
    	props.setRecognizeUnicodeChars(true);
    	props.setOmitComments(true);
    	     
            TagNode node = cleaner.clean(response.getEntity().getContent());
            Log.d("time",String.valueOf(SystemClock.elapsedRealtime() - timeClean));
    
             ...
    
    Att hämta sidan tar c:a 4 sekunder, det är ju bara att acceptera. FS_BOOKINGS_ADDRESS är här addressen som jag postade ovan.

    cleaner.clean(...) tar...... 15 minuter....... Då kör jag i emulatorn.
    Tycker det verkar otroligt konstigt. Någon gissning på varför det skulle ta så lång tid?

    Ska kika på Scanner-klassen också, kanske även jsoup som rekommenderades tidigare.
     
  10. ReaPadda

    ReaPadda Youth Droid Medlem

    Blev medlem:
    30 jan 2011
    Inlägg:
    155
    Mottagna gillanden:
    24

    MINA ENHETER

    Ska man vara riktigt snäll mot telefonen så kanske man istället ska sikta på att lägga ett script på en server nånstans som parsar det väsentliga och bara skickar den nödvändiga, färdigparsade informationen till mobilen, eller hur?
     
  11. Sigma78

    Sigma78 Teen Droid Medlem

    Blev medlem:
    27 jul 2010
    Inlägg:
    360
    Mottagna gillanden:
    6

    MINA ENHETER

    Har du provat att använda html.fromHtml(HTMLCode).toString (); ?

    Jag använder den på vissa ställen, men den är inte supersnabb den heller. Runt 20s brukar det ta för det jag använder den till.

    Försök klippa bort saker i början och slutet innan du gör din clean så att du har så liten sträng som möjligt att rensa.

    Sent from my GT-I9000 using Tapatalk
     
    Last edited: 8 mar 2011
  12. ninetwozero

    ninetwozero Teen Droid Medlem

    Blev medlem:
    17 aug 2010
    Inlägg:
    419
    Mottagna gillanden:
    37

    MINA ENHETER

    Lite halvt OT: Har Java någon specifik datastruktur som den leker allra bäst med, om man väljer att hämta data från en hemsida?

    JavaScript har exempelvis JSON-formatet som fungerar bra när man vill hämta data från externa filer - finns det någon sådan att använda när man utvecklar apps? :-)
     
  13. Dalla

    Dalla Youth Droid Medlem

    Blev medlem:
    1 maj 2010
    Inlägg:
    145
    Mottagna gillanden:
    3

    MINA ENHETER

    Förvisso, men då blir det lite klurigare med användarsessionerna skulle jag tro. Den lista som jag parsar nu innehåller ju ALLA pass som finns och är tillgänglig för vem som helst. Det finns även sidor för att visa t.ex. befintliga bokningar. Kan ju hända att det går relativt fort att sköta inloggning och parsning samtidigt på servern. Får fundera på det!
     
    Last edited: 8 mar 2011
  14. ReaPadda

    ReaPadda Youth Droid Medlem

    Blev medlem:
    30 jan 2011
    Inlägg:
    155
    Mottagna gillanden:
    24

    MINA ENHETER

    Jo det blir lite meckigt men det är ju möjligt att routa igenom sessionscookiena i ditt serverscript och skicka dem vidare till mobilen och vice versa. Att det kommer fler anrop till slutdestinationen från samma IP men med olika cookies är ju bara normalt då det teoretiskt sett skulle kunna sitta många användare bakom samma router (och IP).
     
  15. asperon

    asperon Adult Droid Medlem

    Blev medlem:
    6 aug 2009
    Inlägg:
    586
    Mottagna gillanden:
    94
    Operatör:
    Tele2
    Telefon:
    Pixel 6

    MINA ENHETER

    Operatör:
    Tele2
    Telefon:
    Pixel 6
    Bygg en proxy på din egen server som hämtar och parsar sidan och sedan levererar datat i ett format som du enklare kan använda.
     
  16. ViLANDER

    ViLANDER Senior Droid Medlem

    Blev medlem:
    12 dec 2009
    Inlägg:
    1 594
    Mottagna gillanden:
    172

    MINA ENHETER

    Jag håller med. Om man ändå gör något webbaserat så skulle jag ha en egen server som redan har informationen eller skaffar fram informationen. Dessutom kan man själv fixa olika responser som man själv vill, som till exempel JSON som jag själv föredrar för att ta hem webbinformation.
     
  17. ninetwozero

    ninetwozero Teen Droid Medlem

    Blev medlem:
    17 aug 2010
    Inlägg:
    419
    Mottagna gillanden:
    37

    MINA ENHETER

    Fungerar JSON med vanlig Java?
     
  18. mikma

    mikma Adult Droid Medlem

    Blev medlem:
    5 dec 2010
    Inlägg:
    729
    Mottagna gillanden:
    81
    Telefon:
    Sony XZ2 Compact

    MINA ENHETER

    Telefon:
    Sony XZ2 Compact
    ninetwozero gillar detta.
  19. ninetwozero

    ninetwozero Teen Droid Medlem

    Blev medlem:
    17 aug 2010
    Inlägg:
    419
    Mottagna gillanden:
    37

    MINA ENHETER

  20. Dalla

    Dalla Youth Droid Medlem

    Blev medlem:
    1 maj 2010
    Inlägg:
    145
    Mottagna gillanden:
    3

    MINA ENHETER

    Har du några bra tips på hur man använder Scannerklassen? Har inte jobbat alls med den förut. T.ex. givet texten
    HTML:
    <td class="sort_col2">18:00 - 18:55</td>
    
    
    hur får jag ut 18:00 - 18:55 ?
     
    Last edited: 13 mar 2011