Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Java ja tagien etsiminen html:stä (HTML)

Tommo [23.04.2005 11:54:10]

#

Yritän javalla kirjottaa semmosta ohjelmanpätkää joka lataisi html-sivun (tai -koodin pikemminkin) ja sieltä etsisi tiettyjen tägien (esim <a href..) sisukset. Käytän URL- ja URLConnection -luokkia, joilla helposti saakin html-koodin, sekä headereita tekstimuotoisena latailtua. Aloin sitten näpräämään regular-expressioneiden avulla sitä tagien purkamista, mutta sitten eräs hemmo sanoi, että javassa on valmiit välineet niitten tagien purkamiseen, eikä siten niitten reg.exp:ien kanssa tarvitsisi puuhastella. Se ei vaan osannut sanoa että millä välineillä ja miten homma sitten hoidettaisiin. Osaisiko joku täällä valaista asiaa?

FooBat [24.04.2005 05:12:45]

#

Javassa on mukana ainakin XML-parseri, jolla homma pitäisi hoitua. Haet vaan netistä lisäksi jonkun HTML-version DTD-määrittelyn. Itse olen käyttänyt niitä niin vähän, että en osaa suoraa esimerkkiä antaa, mutta tutki org.xml.sax pakettia (ja sen alapaketteja) ja sen luokkia.

Google osaa varmaan kertoa lisää.

Tommo [25.04.2005 17:28:01]

#

Menee yli hilseen noi xml:t ja sax:it, joten jatkan regular expression:ien kanssa. Tällänen pulma tuli seuraavaksi: en saa ulos tietyn sanan alku- ja loppukohtaa rivin sisältä. Tutoriaalista oon yrittänyt lukea, ja ymmärsin että käyttämällä sulkuja pitäisi onnistua. esim. lauseesta "eka toka kolmas neljäs" reg-expillä (toka) pitäisi matches.start() antaa arvon 5. Mutta kun laitan noita sulkeita sinne niin matchiä ei löydy. Tällatavalla oon kirjottanut sen koodiin: String regex="\\(toka\\)";. Jos laittaa .* alkuun ja loppuun niin sittenhän matchi löytyy, mutta .start() antaa arvon 0 ja .end rivin viimeisen merkin position.

maka78 [28.04.2005 21:31:46]

#

hmm... eiks ton tagien välin sais näin:

String html;
int alku = html.indexOf("<"+tagi+">");
int loppu = html.indexOf("</"+tagi+">");
String tulos = html.substring(alku,loppu);

tää ei tietenkään toimi jos tagiin on laitettu lisäksi parametreja ja toisaalta tämä löytää vain ensimmäisen aloitus ja lopetus tagin.

renni [30.04.2005 20:21:03]

#

1) Kannattaa etsiä vain "<tagi" niin parametrit eivät vaikuta hakuun. Tuossakin toki pitäisi ottaa huomioon isot ja pienet kirjaimet jne.
2) Loppumerkkinä HTML:ssä voi olla myös "/>" tai tagilla ei välttämättä ole loppua ollenkaan. Näitten huomioiminen tekee hommasta jo melko haasteellista, XML olisi paljon helpompi parsittava tämän takia.
3) Ekan tagin löydyttyä voi indexOf:illa toki jatkaa ja hakea seuraavaa jne.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta