Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    51

    [Java] htmlcleaner_2.1 e codifica pagine html

    Salve, ho bisogno di una applicazione che prenda delle informazioni dal codice HTML di alcune pagine web, per poi poterlo riutilizzare all'interno dell'applicazione stessa.
    Ho trovato la libreria htmlcleaner_2.1 (a dire il vero ne ho provate diverse, ma tutte con lo stesso risultato), ed ho riscontrato un problema nell'estrazione di alcuni tipi paritcolari di caratteri, per la maggiore quelli accentati. Allego il codice di un esempio appositamente creato per farvi capire meglio di cosa si tratti e quale sia il problema.
    Il progetto di prova è fatto da 2 classi, HTMLParser.java ed il main.java

    HTMLParser.java
    codice:
    
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.net.URLConnection;
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
    
    import org.htmlcleaner.CleanerProperties;
    import org.htmlcleaner.HtmlCleaner;
    import org.htmlcleaner.TagNode;
    
    public class HtmlParser {
    	
    	// oggetto TagNode radice del file html
    	private TagNode rootNode;
    	private String url_str = null;
    	
    	public HtmlParser(String url_str)
    	{
    		//URL di cui si vuole fare il parsing
    		this.url_str = url_str;
    		
    		// inizializzazione dell'oggetto HtmlCleaner utile a generare un html pulito
    		HtmlCleaner cleaner = new HtmlCleaner();
    		CleanerProperties props = cleaner.getProperties();
    		props.setAllowHtmlInsideAttributes(true);
    		props.setAllowMultiWordAttributes(true);
    		props.setRecognizeUnicodeChars(true);
    		props.setOmitComments(true);
    		 
    		// apertura della connessione
    		URL url;
    		try {
    			
    			url = new URL(url_str);
    			URLConnection conn = url.openConnection();
    			
    			//ora utilizziamo l'oggetto cleaner per "ripulire" l'html e inizializzare l'oggetto rootNode
    			rootNode = cleaner.clean(new InputStreamReader(conn.getInputStream()));
    			
    			
    		} catch (MalformedURLException e) {
    			// TODO Auto-generated catch block
    			//Log.e("Error", e.getMessage());
    			
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			//Log.e("Error", e.getMessage());
    		}
    	}
    	
    	
    	List<Object> getElement(String elementName)
        {
            List<Object> elementList = new ArrayList<Object>();
    
            TagNode Elements[] = rootNode.getElementsByName(elementName, true);
            for (int i = 0; Elements != null && i < Elements.length; i++)
            {
    
                String type = Elements[i].getAttributeByName("href");
                if ( type != null )
                {
                    elementList.add(Elements[i]);
                }
    
            }
    
            return elementList;
        }
    	
    	public String Stampa(String elementName)
        {
        	StringBuffer sb = new StringBuffer();
        	
            try
            {
               
                List<Object> elementi = this.getElement(elementName);
    
                sb.append(">>> Stampa contenuto degli elementi '"+elementName+"' per il sito '"+url_str+"'\n");
                for (Iterator<Object> iterator = elementi.iterator(); iterator.hasNext();)
                {
                    TagNode Element = (TagNode) iterator.next();
                    
                    sb.append("Link: " + Element.getAttributeByName("href").toString()+"\n");
                    
                    
                }
                
                return sb.toString();
            }
            catch(Exception e)
            {
                e.printStackTrace();
            }
            
            return null;
        }
    	
    	public String StampaClasse(String className, String classAttr) {
    	    StringBuffer sb = new StringBuffer();
    
    	    try {   
    	        List<TagNode> elementi = rootNode.getElementListByAttValue(className, classAttr, true, true);
    
    	        sb.append(">>> Stampa contenuto degli elementi con classe'"+className+"' per il sito '"+url_str+"'\n");
    	        TagNode el;
    	        Iterator<TagNode> iterator = elementi.iterator();
    	        while(iterator.hasNext()) {
    	             el = iterator.next();
    	             sb.append("Contenuto: " + el.getText() + "\n");
    	        }
    	        return sb.toString();
    	    }
    	    catch(Exception e) {
    	        e.printStackTrace();
    	    }
    	       
    	    return null;
    	}
    }
    main.java:
    codice:
     public class main {
    	
    	public static void main(String args[]) {
    			
    			System.out.println(TestHTMLParser());
    	
    	}
    	
    	
    	public static String TestHTMLParser() {
    		String elementName = "align";
    		String elementValue = "left";
    		String url_str = "http://www.staseraintv.com/programmi_stasera_rai1.html";
    	        try {
    	        	
    	        	HtmlParser hp = new HtmlParser(url_str);
    
    	            /* passiamo il risultato alla TextView per visualizzarli. */
    	            return hp.StampaClasse(elementName, elementValue);
    	        	
    	             
    	        } catch (Exception e) {
    	             /* In caso di errore, passiamo l'errore alla TextView. */
    	        	System.out.println("Problema nel parsing: \n" + e.getMessage());
    	             //Log.e("Error", e.toString());
    	        }
    			return null;
    	}
    }
    Quello che dovrebbe essere il mio obbiettivo è stampare il contenuto di tutti i tag che abbiano come classe "align" ed attributo "left"! Nel caso in cui dentro tali tag ci sia del testo con caratteri particolari, come in questa pagina di esempio nella sezione relativa alla programmazione di rai1, tali caratteri vengono interpretati male (un punto interrogativo bianco su rombo nero). Come ovviare?

    ulteriore esempio:

    supponiamo che nella mia pagina html da qualche parte abbia questo codice:
    codice:
    <div align="left">
    
    06:00 - Euronews
    
    
    06:10 - Unomattina Caffè
    
    
    06:30 - TG1
    
    
    06:40 - Previsioni sulla viabilità
    
    
    06:45 - Unomattina
    
    
    06:55 - Che tempo fa
    
    
    07:00 - TG1
    
    
    07:30 - Tg1 - L.I.S.
    
    
    07:35 - TG Parlamento
    
    
    07:58 - Che tempo fa
    
    
    08:00 - TG1
    
    
    08:50 - Tg1 Focus
    
    
    08:55 - Che tempo fa
    
    
    </div>
    il mio programma dovrebbe stampare:
    codice:
    06:00 - Euronews
    
    06:10 - Unomattina Caffè
    
    06:30 - TG1
    
    06:40 - Previsioni sulla viabilità
    
    06:45 - Unomattina
    
    06:55 - Che tempo fa
    
    07:00 - TG1
    
    07:30 - Tg1 - L.I.S.
    
    07:35 - TG Parlamento
    
    07:58 - Che tempo fa
    
    08:00 - TG1
    
    08:50 - Tg1 Focus
    
    08:55 - Che tempo fa
    invece vien fuori:
    codice:
    06:00 - Euronews
    
    06:10 - Unomattina Caff�
    
    06:30 - TG1
    
    06:40 - Previsioni sulla viabilit�
    
    06:45 - Unomattina
    
    06:55 - Che tempo fa
    
    07:00 - TG1
    
    07:30 - Tg1 - L.I.S.
    
    07:35 - TG Parlamento
    
    07:58 - Che tempo fa
    Grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    51
    up... ma siete tutti in ferie?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.