Avatar billede syncroniq Nybegynder
04. september 2005 - 16:34 Der er 10 kommentarer og
1 løsning

Hente webside, og klippe text

Hey,

nogen der har noget kode til at hente en html fil, og noget til hvordan man finder bestemte ting i den og klipper ud?

Det er lidt uden for det jeg plejer at lave i java nemlig.

Skal have hentet en html fil fra nettet, lavet om til en String, og så hente ting ud af den. Der er jeg lidt på bar bund.
Avatar billede jakobdo Ekspert
04. september 2005 - 16:46 #1
Jeg kan ikke JAVA, men kig her:
http://www.devdaily.com/java/edu/pj/pj010011/pj010011.shtml
og det med at finde en streng i en streng, kan du bruge en funktion som hedder INDEXOF:
http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html#indexOf
Avatar billede arne_v Ekspert
04. september 2005 - 17:35 #2
det er jo sådan man gør det

jeg ville lave hentningen en lille bitte smule anderledes:

package september;

import java.net.*;
import java.io.*;

public class HttpGet {
  public static void main(String[] args) {
      try {
        URL url = new URL("http://www.eksperten.dk/");
        HttpURLConnection con = (HttpURLConnection)url.openConnection();
        con.connect();
        if(con.getResponseCode() == HttpURLConnection.HTTP_OK) {
            BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream()));
            String line;
            while((line = br.readLine()) != null) {
                System.out.println(line);
            }
        }
        con.disconnect();
      } catch (MalformedURLException e) {
        e.printStackTrace();
      } catch (FileNotFoundException e) {
        e.printStackTrace();
      } catch (IOException e) {
        e.printStackTrace();
      }
  }
}
Avatar billede syncroniq Nybegynder
04. september 2005 - 18:49 #3
Hey,

Fik lavet lidt slamkode... der skulle virke...

import java.io.*;
import java.net.*;

public class AdressByPhoneNumber {

    public static void main(String[] args) {
       
          String phonenumber = "20320805";

          URL u;
          InputStream is = null;
          DataInputStream dis;
          String s = "";
          String content = "";
          String navn = "";
          String gade = "";
          String postnr = "";
          String By = "";

          try {
             
              u = new URL("http://www.degulesider.dk/vbw/super/resultat.do?compPhone="+phonenumber);
              is = u.openStream();
              dis = new DataInputStream(new BufferedInputStream(is));
            while ((s = dis.readLine()) != null) {
                content = content + s;
            }
            } catch (MalformedURLException mue) {

            System.out.println("Ouch - a MalformedURLException happened.");
            mue.printStackTrace();
            System.exit(1);

              } catch (IOException ioe) {

            System.out.println("Oops- an IOException happened.");
            ioe.printStackTrace();
            System.exit(1);

              } finally {


            try {
              is.close();
            } catch (IOException ioe) {

            }

          } 
          int navne = content.indexOf("class=\"navn\"");
          if(navne > -1){
              int navne2 = content.indexOf("</td>",navne);
            int adress = content.indexOf("<td style=\"width: 22px;\"></td>",navne2);
              int adress2 = content.indexOf("<br>",adress);
                int byen = content.indexOf("&#32;",adress2);
              int byen2 = content.indexOf("&nbsp;",byen);
           
              gade = content.substring(adress+52,adress2);         
              navn = content.substring(navne+42,navne2);
              postnr = content.substring(adress2+5,adress2+9);
              By = content.substring(byen+5,byen2);
         
         
            System.out.println (""+navn);
            System.out.println (""+gade);
            System.out.println (""+postnr + " " + By);
          }else{
              System.out.println("Navn findes ikke");
          }

    }
}

Dog er dis.readLine() depricated. Hvad skal man bruge der istedet?
Avatar billede arne_v Ekspert
04. september 2005 - 18:51 #4
BufferedReader readLine
Avatar billede arne_v Ekspert
04. september 2005 - 18:51 #5
en af grundene til at jeg ville gøre det lidt anderledes !

:-)
Avatar billede syncroniq Nybegynder
04. september 2005 - 18:57 #6
Hey,

Kanon. Jammen vil i ikke poste et svar, så jeg kan give point?

Tusinde tak. Det er 4år siden jeg sidst har lavet Java seriøst, så jeg skal lige ind i det igen.
Avatar billede syncroniq Nybegynder
04. september 2005 - 19:28 #7
her er den endelige kode...

import java.net.*;
import java.io.*;


public class AdressByPhoneNumber {

    public static void main(String[] args) {
       
          String phonenumber = "27209121";

          URL u;
          InputStream is = null;
          DataInputStream dis;
          String s = "";
          String content = "";
          String navn = "";
          String gade = "";
          String postnr = "";
          String By = "";

         
try {
        URL url = new URL("http://www.degulesider.dk/vbw/super/resultat.do?compPhone="+phonenumber);
        HttpURLConnection con = (HttpURLConnection)url.openConnection();
        con.connect();
        if(con.getResponseCode() == HttpURLConnection.HTTP_OK) {
            BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream()));
            String line;
            while((line = br.readLine()) != null) {
                content = content + line;
            }
        }
        con.disconnect();
      } catch (MalformedURLException e) {
        e.printStackTrace();
      } catch (FileNotFoundException e) {
        e.printStackTrace();
      } catch (IOException e) {
        e.printStackTrace();
      }
         
          int navne = content.indexOf("class=\"navn\"");
          if(navne > -1){
              int navne2 = content.indexOf("</td>",navne);
            int adress = content.indexOf("<td style=\"width: 22px;\"></td>",navne2);
              int adress2 = content.indexOf("<br>",adress);
                int byen = content.indexOf("&#32;",adress2);
              int byen2 = content.indexOf("&nbsp;",byen);
           
              gade = content.substring(adress+52,adress2);         
              navn = content.substring(navne+42,navne2);
              postnr = content.substring(adress2+5,adress2+9);
              By = content.substring(byen+5,byen2);
         
         
            System.out.println (""+navn);
            System.out.println (""+gade);
            System.out.println (""+postnr + " " + By);
          }else{
              System.out.println("Navn findes ikke");
          }
    }
}
Avatar billede arne_v Ekspert
04. september 2005 - 19:40 #8
svar fra mig

måske kunne den hente data fra streng laves nemmere med regular expression
Avatar billede syncroniq Nybegynder
04. september 2005 - 19:53 #9
Hey,

Det kan jeg ikke huske hvad er, regular expression. Men det virker fint her på min maskine. Ved godt det ikke er jordens bedste løsning, men det er fint nok til det jeg skal bruge det til.

Tak for hjælpen.
Avatar billede arne_v Ekspert
04. september 2005 - 19:56 #10
du glemte jakob !
Avatar billede arne_v Ekspert
04. september 2005 - 19:57 #11
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester