Supprimer les balises d'un fichier html

Soyez le premier à donner votre avis sur cette source.

Snippet vu 15 777 fois - Téléchargée 17 fois

Contenu du snippet

Ce programme lit le contenu d'une url et le transforme en texte. Du moins, il supprime toutes les balises html.
Il utilise la librairie htmlparser.

Source / Exemple :


import org.htmlparser.Parser;
import org.htmlparser.util.NodeIterator;
import org.htmlparser.util.ParserException;

public class TagStripper{

	public static void main(String[] args){

		final StringBuilder text = new StringBuilder();

		try {
			final Parser parser = new Parser ("http://www.javafr.com");
			NodeIterator i = parser.elements();
			while (i.hasMoreNodes()) 
				text.append(i.nextNode().toPlainTextString());
			System.out.println(text);
		} catch(ParserException e){
			e.printStackTrace();
		}

	}
}

A voir également

Ajouter un commentaire

Commentaires

Messages postés
18
Date d'inscription
jeudi 27 mars 2008
Statut
Membre
Dernière intervention
16 mars 2009

Bonjour,
j'ai éssayé un code pour parser un fichier html, j'ai réussit de sortir toutes les balises c'est mon codes:
#
import java.io.Serializable;
import java.net.HttpURLConnection;
import java.net.URLConnection;
import org.htmlparser.*;
import org.htmlparser.filters.*;
import org.htmlparser.http.*;
import org.htmlparser.lexer.*;
import org.htmlparser.util.*;
import org.htmlparser.visitors.*;
import org.htmlparser.tags.*;
import org.htmlparser.nodes.*;

public class SimpleParse4 {
public static void main (String [] args) {
Parser parser = null;
NodeFilter filter = null;

try {
parser = new Parser ();
if (1 < args.length)
filter = new TagNameFilter (args[1]);
else
{
filter = null;
// for a simple dump, use more verbose settings
parser.setFeedback (Parser.STDOUT);
Parser.getConnectionManager ().setMonitor (parser);
}
Parser.getConnectionManager ().setRedirectionProcessingEnabled (true);
Parser.getConnectionManager ().setCookieProcessingEnabled (true);
parser.setResource ("http://www.google.com");
NodeList list = parser.parse(filter);
NodeIterator i = list.elements ();
while (i.hasMoreNodes ())
processMyNodes(i.nextNode ());
}
catch (EncodingChangeException ece) {
try {

parser.reset ();
NodeList list = parser.parse(filter);
for (NodeIterator i = list.elements (); i.hasMoreNodes (); )
processMyNodes (i.nextNode ());
}
catch (ParserException e) {
e.printStackTrace ();
}
}
catch (ParserException e) {
e.printStackTrace ();
}
}
static void processMyNodes (Node node) throws ParserException {
if (node instanceof TextNode)
{

TextNode text = (TextNode)node;

System.out.println("text: "" + text.getText() + """);
}
else if (node instanceof RemarkNode)
{

RemarkNode remark = (RemarkNode)node;

}
else if (node instanceof HeadTag)
{

HeadTag tag = (HeadTag)node;
NodeList nl = tag.getChildren ();
if (nl != null)
for (NodeIterator i = nl.elements (); i.hasMoreNodes();) {
Node nextNode = i.nextNode();
if(nextNode instanceof TitleTag) {
System.out.println("Title: " + ((TitleTag)nextNode).getTitle());
break;
}
}
}
else if (node instanceof TagNode)
{

TagNode tag = (TagNode)node;
String tagName = tag.getTagName();
System.out.println("tag name: " + tagName);
System.out.println("tag text: " + tag.getText());
if(tag instanceof LinkTag) {
LinkTag link = (LinkTag)tag;

System.out.println("Link: " + link.getLink());
}

NodeList nl = tag.getChildren ();
if (null != nl)
for (NodeIterator i = nl.elements (); i.hasMoreNodes(); )
processMyNodes (i.nextNode ());
}
}
}
#

mais maintenant je veux afficher chaque balise dans un vecteur
exemple toutes les balises img dans un vecteur
les balises link dans un autre vecteur etc...
j'ai éssayé mais il m'affiche chaque balise image dans un vecteur et moi je veux les regrouper dans un seul vecteur. si quelqu'un peu m'aider et merci d'avance.
Messages postés
29
Date d'inscription
lundi 13 juin 2005
Statut
Membre
Dernière intervention
15 avril 2008

ca serai rapide avec ca :

String URL = "http://www.javafr.com";
StringExtractor se = new StringExtractor (URL);
String contents = se.extractStrings(true);
System.out.println(contents);

good luck :)
Messages postés
30
Date d'inscription
vendredi 12 juillet 2002
Statut
Membre
Dernière intervention
15 mai 2009

Salut,

Avec un StringBuilder c'est beaucoup mieux...
L'inconvénient de ta méthode c'est qu'à chaque itération il instancie un nouvel Objet String.

ex:
public static String HtmlToText(final String urlStr)
throws ParserException {
final StringBuilder text = new StringBuilder();
final Parser parser = new Parser(urlStr);
for (final NodeIterator i = parser.elements(); i.hasMoreNodes();)
text.append(i.nextNode().toPlainTextString());
return text.toString();
}

;-)

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.