# quelltext html-seite speichern + links speichern



## Mordin (17. Okt 2007)

hi leute ich habe folgendes problem.

ich möchte in meinem programm eine url eingeben und von dieser wird dann der quelltext gespeichert. außerdem sollen die links auf dieser seite verfolgt werden und auch die nächsten seiten gespeichert werden. das läuft erstma aber nur bis zur ersten ebene, doch das ganze soll bis zu einer bestimmten tiefe passieren, die man als benutzer eingeben kann. da hackt es bei mir!!!
habt ihr vielleicht einen ansatz für.
schonma danke im vorraus.


hier noch mein code:

```
import inout.in;

import java.io.*;
import java.net.*;
import java.util.*;
import java.util.regex.*;

public class quellespeichern { 
 
   public String URL; 
   		   
   public quellespeichern() { 	  
      leseSeite(); 
   } 
   
   
   public Vector leseUrl(String url) {

		  // Eingabe der Internetseite
		 
	   	  URL = url;
		  
	      String zeile = null; 
	      String datei = ""; 
	      try { 
	    	 // erstellen der URL
	         URL myurl = new URL(URL); 
	         try { 
	        	// Zugriff auf URL und auslesen dieser bis zeile gleich null
	            BufferedReader lies = new BufferedReader(new InputStreamReader(myurl.openStream())); 
	            while ((zeile = lies.readLine()) != null) { 
	               datei += zeile; 
	            } 
	         } 
	         catch (IOException ex2) { 
	            System.out.println("FEHLER beim Zugriff: " + ex2.getMessage()); 
	         } 
	      } 
	      catch (MalformedURLException ex) { 
	         System.out.println("FEHLER bei der URL " + ex.getMessage()); 
	      } 
	      
	      // speichern des Quelltextes in einer Textdatei
	      Writer fw = null; 
	      
	      try 
	      { 
	    	// Pfad und Eingabe des Dateinamens
	        fw = new FileWriter( "C:\\Dokumente und Einstellungen\\mleh\\" + in.readString("Bitte Dateinamen eingeben: ") + ".txt"); 
	        fw.write(datei); 
	      } 
	      catch ( IOException e ) { 
	        System.err.println( "Konnte Datei nicht erstellen" ); 
	      } 
	      finally { 
	        if ( fw != null ) 
	          try { fw.close(); } catch ( IOException e ) { } 
	      }
	      
	      // Zugriff auf gespeicherten Quelltext und auslesen der Links
	      Vector links = new Vector(getLinks(datei));
	      for ( int i = 0; i < links.size(); i++) {
	      // Ausgabe der Links
	      System.out.println(links.elementAt(i));                               
	      }
	      
	      
	      return links;	   
   }
   
   public void leseSeite() {
	   
	   String url = in.readString("Bitte URL eingeben:");	   	   
	   Vector links = leseUrl(url);
	   for (int i=0; i<links.size(); i++) {
		   url = (String) links.get(i);
		   leseUrl(url);	   
	   }
   	  }
   	  
   // Links
   public static final String REGEX = "(http[s]?|ftp)://([-\\w\\.]+)+(:\\d+)?(/([\\w/_\\.]*(\\?\\S+)?)?)?"; 
   
   public static Vector getLinks(String input) { 
       Pattern p = Pattern.compile(REGEX, Pattern.CASE_INSENSITIVE); 
       Matcher m = p.matcher(input); 
       Vector items = new Vector(); 
       while (m.find()) { 
           items.addElement(m.group()); 
       } 
       return items; 
   } 
   
   
   public static void main(String[] args) { 
	   System.getProperties().setProperty("proxySet","true");
	   System.getProperties().setProperty("proxyHost","proxy");
	   System.getProperties().setProperty("proxyPort","8080");
       new quellespeichern();       
   } 
}
```


----------



## Gast (23. Okt 2007)

ich vermute mal das problem besteht darin, dass du die Links mit " (Anführungszeichen) einließt und java dies als 'String-Ende' interpretiert.

hab aber keine ahnung wie man java dazu bringen kann das richtig zu verstehen...

jemand ne idee?


----------



## madboy (23. Okt 2007)

```
import inout.in;

import java.io.*;
import java.net.*;
import java.util.*;
import java.util.regex.*;

public class quellespeichern { 
 
   public String URL; 
      		   
   public quellespeichern() { 	  

      String url = in.readString("Bitte URL eingeben:");	   
      int tiefenlimit = (Integer.parseInt(in.readString("bitte Tiefe eingeben")));
      leseSeite(url, tiefenlimit); 
   } 
   
   
   public Vector leseUrl(String url) {

		  // Eingabe der Internetseite
		 
	   	  URL = url;
		  
	      String zeile = null; 
	      String datei = ""; 
	      try { 
	    	 // erstellen der URL
	         URL myurl = new URL(URL); 
	         try { 
	        	// Zugriff auf URL und auslesen dieser bis zeile gleich null
	            BufferedReader lies = new BufferedReader(new InputStreamReader(myurl.openStream())); 
	            while ((zeile = lies.readLine()) != null) { 
	               datei += zeile; 
	            } 
	         } 
	         catch (IOException ex2) { 
	            System.out.println("FEHLER beim Zugriff: " + ex2.getMessage()); 
	         } 
	      } 
	      catch (MalformedURLException ex) { 
	         System.out.println("FEHLER bei der URL " + ex.getMessage()); 
	      } 
	      
	      // speichern des Quelltextes in einer Textdatei
	      Writer fw = null; 
	      
	      try 
	      { 
	    	// Pfad und Eingabe des Dateinamens
	        fw = new FileWriter( "C:\\Dokumente und Einstellungen\\mleh\\" + in.readString("Bitte Dateinamen eingeben: ") + ".txt"); 
	        fw.write(datei); 
	      } 
	      catch ( IOException e ) { 
	        System.err.println( "Konnte Datei nicht erstellen" ); 
	      } 
	      finally { 
	        if ( fw != null ) 
	          try { fw.close(); } catch ( IOException e ) { } 
	      }
	      
	      // Zugriff auf gespeicherten Quelltext und auslesen der Links
	      Vector links = new Vector(getLinks(datei));
	      for ( int i = 0; i < links.size(); i++) {
	      // Ausgabe der Links
	      System.out.println(links.elementAt(i));                               
	      }
	      
	      
	      return links;	   
   }
   
private int tiefenzaehler = 0;

   public void leseSeite(String url, int tiefenlimit) {
	   tiefenzaehler++;

//	   String url = in.readString("Bitte URL eingeben:");	   	   
	   Vector links = leseUrl(url);
	   for (int i=0; i<links.size(); i++) {
		   url = (String) links.get(i);
//		   leseUrl(url);
		   if(tiefenzaehler <= tiefenlimit) {
		     leseSeite(url);
		   }
	   }
   	  }
   	  
   // Links
   public static final String REGEX = "(http[s]?|ftp)://([-\\w\\.]+)+(:\\d+)?(/([\\w/_\\.]*(\\?\\S+)?)?)?"; 
   
   public static Vector getLinks(String input) { 
       Pattern p = Pattern.compile(REGEX, Pattern.CASE_INSENSITIVE); 
       Matcher m = p.matcher(input); 
       Vector items = new Vector(); 
       while (m.find()) { 
           items.addElement(m.group()); 
       } 
       return items; 
   } 
   
   
   public static void main(String[] args) { 
	   System.getProperties().setProperty("proxySet","true");
	   System.getProperties().setProperty("proxyHost","proxy");
	   System.getProperties().setProperty("proxyPort","8080");
       new quellespeichern();       
   } 
}
```
Allerdings nicht getestet aber die Idee sollte passen :wink:

Gast: String-Ende ist in Java nicht das Anführungszeichen. Ich vermute, dass Strings wie in C++ durch  \0 abgeschlossen werden. Aber ich lasse mich gern eines besseren belehren ;-)


----------

