Newsgroup: it.comp.java
Titolo: Estrarre informazioni da pagina HTML

Salve,
qualcuno sa dirmi una procedura per estrarre informazioni da pagine
html??
Ad esempio, se io volessi prendere l'attributo "lang" e il contenuto
dei tag <title> dal seguente codice, come dovrei fare?
<html xmlns:lxslt="
http://xml.apache.org/xslt
" lang="it">
<head>
<title>Titolo pagina</title>
</head>
</html>
Aiuto please!

Ho trovato la libreria Jtidy, ma non riesco a capire bene il
funzionamento.
Qualcuno di voi la conosce??
è abbastanza urgente

Ciao a tutti,
personalmente ho provato Jericho html Parser con ottimi risultati:
http://jerichohtml.sourceforge.net/doc/index.html
spero possa esserti utile
Ciao



CIao Monique, grazie per la dritta, la Jericho sembra essere un'ottima
libreria. Però purtruppo ho dei problemi quando entro all'intero di un
tag e devo fare delle veriche in questo segmento.
Mi spiego meglio, io ho questo codice:
---------------------------------------------------------------------------------------------------------------------------------------
Source source = new Source(new URL(sourceUrlString));
source.setLogWriter(new OutputStreamWriter(System.err));
source.fullSequentialParse();
List elementList = source.findAllElements("table");   //Prendo tutti i
segmenti con tag table
for (Iterator i = elementList.iterator(); i.hasNext();) {
			Element elementTable = (Element)i.next();
if
( elementTable.getAttributes().getValue("summary").equals("Risultati"))
{     //controllo se l'attributo summary ha un determinato valore
				List TRlist = elementTable.findAllElements("tr");
				for (Iterator j = TRlist.iterator(); j.hasNext();) {
					Element elementTR = (Element)j.next();
					if (elementTR.getAttributes().getValue("align").equals("center"))
{  //ERRORE!
						System.out.println("creo lista TD");
						List TDlist = elementTR.findAllElements("td");
                                                 .
                                                 .
                                                 .
---------------------------------------------------------------------------------------------------------------------------------------
L'errore in output sta sul secondo controllo. Il primo va a buon fine,
ho verificato e mi da i corretti risultati. Forse il problema sta nel
fatto che all'inizio uso il metodo findAllElements sul source, mentre
dopo il findAllElements lo faccio sull'ElementTable che non è un
segmento, ma eclipse non mi segnala errori di incongruenza di dati.
Avete idee??
Grazie

 Avete idee??
che errore da'?

 che errore da'?
mi da un Exception in thread "main" e mi segnala quella riga


Nessun idea??

 Nessun idea??
Perché non metti il trace dell'eccezione?
-- 
Linux engine 2.6.17-11-generic i686 GNU/Linux

Ho risolto svariati problemi e già di questo sono felice.
Però c'è sempre qualcosa di strano. Vi invito a vedere il codice HTML
con indirizzo in sourceUrlString
Per prima cosa non capisco perchè in output mi dà tutto bene, ma mi
ripete per due volte sia la località di partenza, sia quella di
ritorno.
Poi, risolto ciò, vorrei mettere quello che prendo in un file xml ben
formattato... ma non so come fare!
Sono stato chiaro?
import au.id.jericho.lib.html.*;
import java.util.*;
import java.io.*;
import java.net.*;
public class parserHtml {
	public static void main(String[] args) throws Exception {
		String sourceUrlString="
http://orario.trenitalia.com/b2c/TimeTable
?
stazin=pompei&stazout=salerno&datag=02&datam=04&dataa=2007&timsh=18&timsm=25&invia=INVIA&lang=it&nreq=1&channel=tcom";
		if (args.length==0)
			System.err.println("Using default argument of \""+sourceUrlString
+'"');
		else
			sourceUrlString=args[0];
		if (sourceUrlString.indexOf(':')==-1)
sourceUrlString="file:"+sourceUrlString;
		MasonTagTypes.register();
		Source source=new Source(new URL(sourceUrlString));
		source.setLogWriter(new OutputStreamWriter(System.err)); // send log
messages to stderr
		source.fullSequentialParse();
		try {
			List elementList = source.findAllElements(HTMLElementName.TABLE);
			for (Iterator i = elementList.iterator(); i.hasNext();) {
				Element elementTable = (Element)i.next();
				if ( elementTable.getAttributeValue("summary").equals("Risultati
della ricerca")) {
					System.out.println("-------->"
+elementTable.getAttributeValue("summary"));
					List TRlist = elementTable.findAllElements(HTMLElementName.TR);
					for (Iterator j = TRlist.iterator(); j.hasNext();) {
						Element elementTR = (Element)j.next();
						if (elementTR.getAttributeValue("align")!= null) {
							System.out.println("Sono dentro TR");
							List TDlist = elementTR.findAllElements(HTMLElementName.TD);
							for (Iterator y = TDlist.iterator(); y.hasNext();) {
								Element elementTD = (Element)y.next();
								List fontList =
elementTD.findAllElements(HTMLElementName.FONT);
								for (Iterator x = fontList.iterator(); x.hasNext();) {
									Element elementFont = (Element)x.next();
									String orario = elementFont.getContent().extractText();
									if (orario.length() != 0) System.out.println("Ho preso:
"+orario);
								} //end for x
							} //end for y
						} //end if su tr
					} //end f jor
				} //end if su table
			} //end for i
		} //end try
		catch (Exception e) {
			e.printStackTrace();
		}
	} //end main
} //end class