Newsgroup: it.comp.java
Titolo: "Scaricare" una pagina web e farne il parsing

Salve a tutti,
volevo chiedervi che approccio mi consigliate per il seguente compito:
devo scaricare una pagina web (senza salarla in locale) e poterne fare 
il parsing del codice.
Dovrò prendere solo il codice compreso fra due particolari tag, e poi 
"pulirlo" di tutto il codice html&simili in mezzo, lasciando solo il 
testo pulito....
Qualcuno sa dirmi come orientarmi??
Scusate la domanda un po' da newbie, ma in effetti è quello che sono!! :)
Grazie ancora
Ciao


La pagina la scarichi con java.net.URL#openStream().
Controlla la documentazione.
L'estrazione potresti provare a farla in due modi:
  - semplice: usando le Regular Expression.
http://java.sun.com/javase/6/docs/api/java/util/regex/package-summary.html
  - più complicato: SAX Parser
http://java.sun.com/javase/6/docs/api/javax/xml/parsers/SAXParser.html
-- 
Andrea Francia
http://www.andreafrancia.it/

 Ciao


Ecco 2 risorse che possono fare al tuo caso, purtroppo non ho ancora
avuto il tempo di testarle
http://www.devdaily.com/blog/post/java/java-program-download-parse-contents-of-url/
http://www.javareference.com/jrexamples/viewexample.jsp?id=97
 (qualche
errore se usato sotto Eclipse)
ed in più, trovate appena adesso
http://www.javalobby.org/java/forums/t105916.html
http://forum.java.sun.com/thread.jspa?threadID=598596&messageID=3186807
http://jerichohtml.sourceforge.net/doc/index.html
http://www.ielettronica.it/argomenti.php?idTesiProgApp=338
JGet java 
http://www.sweb.cz/ivan.zderadicka/jget.html
 (scaricare
files dal Web)



Questo codice estrae da una pagina tutti i siti che referenzia e li 
aggiunge ad un file evitando di duplicare i link. Clona pure.
Per i tuoi fini devi cambiare il patter matching.
Ciao
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.TreeSet;
import java.util.concurrent.locks.ReentrantReadWriteLock.ReadLock;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
 
 
public class suck {
 
	/**
	 * @param args
	 * @return 
	 * @throws IOException 
	 */
	static TreeSet<String> hs= new TreeSet<String>() ;
 
	private static void find (String url) throws IOException {
 
		URL ur=new URL(url);
		BufferedReader br=new BufferedReader(
				new InputStreamReader(ur.openStream()));
		loadSite(br);
		br.close();
 	}
 
	private static void loadSite(BufferedReader br) throws 
IOException {
		Pattern p = Pattern.compile("([\\w]*\\.[\\w,-,_]+\\.[\\w]
+)");
		//Pattern p = Pattern.compile("h");
		Matcher m;
		//FileReader fs = new FileReader(ur.getFile());
		String st;
 
 		while ((st=br.readLine())!=null){
 			//System.out.print("\n"+st);
			m = p.matcher(st);
			while (m.find())  {
//				System.out.print("\n"+
//						String.format("I found 
the text \"%s\" starting at " +
//                   "index %d and ending at index %d.%n",
//                    m.group(), m.start(), m.end()));
				if (!hs.contains(m.group())) {
					//System.out.print("\n"+m.group
());
					hs.add(m.group());	
				}
			}	
 		}
	}
	private static void loadList (String fn) throws IOException {
		BufferedReader br=new BufferedReader(new FileReader(fn));
		loadSite(br);
		br.close();
	}
	private static void saveList(String fn) throws IOException {
		BufferedWriter bw= new BufferedWriter( new FileWriter
(fn));
		Iterator i=hs.iterator();
		while (i.hasNext()){
			bw.write(i.next()+"\n");
		}
		bw.close();
	}
 
	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		loadList(args[0]);
		System.out.print("\n nel file originario ci sono "+hs.size
()+" siti");
		for (int i=1;i<args.length;i++)
			find(args[i]);
		Iterator i=hs.iterator();
 		System.out.print(String.format("\n adesso hai %1d ", 
hs.size()));
 		while (i.hasNext()) {
 			System.out.print("\n"+i.next());
 		}
 		saveList(args[0]);
	}
 
}
-- 
Il mio nome è legione

Aggiungo questa risorsa, in Italiano
http://nicchia.ingce.unibo.it/oop/web/7-socketesempi.html
..e via si ritorna a studiare :)