Pulire codice HTML eccetto alcuni tag in Java sfruttando Jsoup

Postato da ROb | nella categoria Java, Sviluppo web | venerdì, 24 settembre 2010

4

Abbiamo già parlato di Jsoup in questo precedente post.
In due parole Jsoup è una potente libreria di parsing html/xml che permette di leggere e manipolare facilmente stringhe e porzioni anche grandi di codice html/xml.

Oggi voglio farvi vedere come possiamo sfruttarla per pulire del codice html (proveniente ad esempio dal campo di un web form) mantenendo solamente i tag che vogliamo.

Questa opzione è infatti molto utile nel caso in cui si voglia permettere agli utenti di arricchire il dato con la formattazione classica dei testi: bold, italico, … senza però rischiare di esporci al pericoloso XSS attack che consiste nell’inserire codice Javascript malevolo che punta verso qualche altro sito.

Con poche righe di codice Jsoup ci permette di definire la nostro lista di tag partendo da alcuni set predefiniti.

        ...
        String unsafe = "<p><a href='http://www.bits4beats.com/' onclick='stealCookies()'>Benvenuto <b>Roberto Rossi</b></a> lo so che che sei di Macerata! <br/>... sei proprio un <i>impiastro</i>!</p>";

		Whitelist myWL = Whitelist.simpleText();
		myWL.addTags("br", "hr");

		String safe = Jsoup.clean(unsafe, myWL);
		System.out.println("stringa sicura: " + safe);
        ...

Se lo eseguiamo otterremo la seguente stringa:

stringa sicura: Benvenuto <b>Roberto Rossi</b> lo sei che sei di Macerata! <br /> sei proprio un <i>impiastro</i>!

In pratica abbiamo detto a Jsoup di partire dalla lista accettata simpleText() che contiene i tag essenziali della formattazione a cui abbiamo aggiunto il tag br e il tag hr.

Estrarre informazioni da un sito attraverso jsoup, html parser per Java

Postato da ROb | nella categoria Java, Sviluppo web | lunedì, 1 febbraio 2010

0

Ieri mi sono divertito a testare una nuova libreria in Java per il parsing di documenti HTML/XML.

Jsoup, questo il nome particolare di tale libreria, permette con una sintassi a selettori (stile JQuery) di inviduare specifici elementi del DOM di un documento html, sia locale che remoto.

Jsoup, html java parser

Dopo aver scaricato la libreria dal sito ufficiale e averla importata nel mio workspace Eclipse, ho modificato leggermente uno degli esempi proposti per provare a estrarre i titoli e gli url di tutti i post dall’homepage del mio blog (http://www.bits4beats.it).

Beh… il risultato è stato veramente interessante e ho molta voglia di farci qualcosa di più costruttivo. Pensavo addirittura a uno script o un programmino per visualizzare il posizionamento di un sito per particolari keyword su più motori di ricerca. Se avrò voglia, tempo e capacità per farlo pubblicherò un post in merito.

Per ora godetevi queste 10 righe di codice:

		Document doc = Jsoup.parse(new URL("http://www.bits4beats.it/"), 2000);

		Elements resultLinks = doc.select("div.post-title > h2 > a");
		System.out.println("Ultimi post di www.bits4beats.it con jsoup");
		for (Element link : resultLinks) {
			System.out.println();
			String href = link.attr("href");
			System.out.println("Titolo: " + link.text());
			System.out.println("Url: " + href);
		}

Nella riga 1 si crea un oggetto Document facendo il download dell’homepage del blog aspettando al massimo 2000 millisecondi.
Successivamente si cercano tutti gli elementi di tipo a figli diretti di elementi di tipo h2 figli diretti a loro volta di elementi div con classe post-title.
Per ognuno di questi elementi trovati, alle righe 8 e 9, vengono stampati rispettivamente l‘anchor text (cioè il testo cliccabile del link) e l’url del post.

Un ringraziamento allo sviluppatore del progetto, Jonathan Hedley, che ha corretto in tempi brevissimi un piccolo errore nel codice del jsoup Cookbook.