Comment utiliser l'Analyseur HTML pour obtenir des informations complètes sur toutes les balises dans le code HTML de la page
Je suis en utilisant le HTML Parser pour développer une application.
Le code ci-dessous n'est pas en mesure d'obtenir l'ensemble des balises dans la page.
Il y a quelques balises qui sont raté et les attributs et le corps de texte d'entre eux sont également manqué.
Merci de m'aider à expliquer pourquoi est-ce qui se passe.....ou me suggérer d'autres....
URL url = new URL("...");
PrintWriter pw=new PrintWriter(new FileWriter("HTMLElements.txt"));
URLConnection connection = url.openConnection();
InputStream is = connection.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
HTMLEditorKit htmlKit = new HTMLEditorKit();
HTMLDocument htmlDoc = (HTMLDocument)htmlKit.createDefaultDocument();
HTMLEditorKit.Parser parser = new ParserDelegator();
HTMLEditorKit.ParserCallback callback = htmlDoc.getReader(0);
parser.parse(br, callback, true);
ElementIterator iterator = new ElementIterator(htmlDoc);
Element element;
while ((element = iterator.next()) != null)
{
AttributeSet attributes = element.getAttributes();
Enumeration e=attributes.getAttributeNames();
pw.println("Element Name :"+element.getName());
while(e.hasMoreElements())
{
Object key=e.nextElement();
Object val=attributes.getAttribute(key);
int startOffset = element.getStartOffset();
int endOffset = element.getEndOffset();
int length = endOffset - startOffset;
String text=htmlDoc.getText(startOffset, length);
pw.println("Key :"+key.toString()+" Value :"+val.toString()+"\r\n"+"Text :"+text+"\r\n");
}
}
}
Le problème est trop vague. Prenons un exemple de site (
en fait, je veux extraire des informations telles que le nom du produit,prix, etc de tous les produits énumérés dans un site d'achats en ligne comme amazon.com Comment dois-je procéder???
http://google.com
peut-être?) et merci de dire en détail ce qu'est exactement est manquant.en fait, je veux extraire des informations telles que le nom du produit,prix, etc de tous les produits énumérés dans un site d'achats en ligne comme amazon.com Comment dois-je procéder???
OriginalL'auteur | 2010-02-18
Vous devez vous connecter pour publier un commentaire.
Je fais cela de façon relativement fiable avec Analyseur HTML, (à condition que le document HTML n'est pas un changement de sa structure). Un service web avec une API stable est beaucoup mieux, mais parfois nous avons juste ne pas en avoir un.
Idée générale:
Vous devez d'abord savoir dans quelles balises (
div
,meta
,span
, etc) les informations que vous voulez, et de connaître les attributs pour identifier ces balises. Exemple :si vous êtes à la recherche de ce "prix", alors vous êtes intéressés par
span
balises avecclass
"prix".Analyseur HTML a un filtre par attribut fonctionnalité.
Lorsque vous analysez l'aide d'un filtre, vous obtiendrez une liste de
Nodes
que vous pouvez faire uninstanceof
opération pour déterminer si elles sont le type qui vous intéresse, pourspan
vous feriez quelque chose commeVoir la liste des balises prises en charge ici.
Un exemple avec Analyseur HTML pour saisir la balise meta qui a la description sur un site:
Étiquette De L'Échantillon :
Code:
OriginalL'auteur bakkal
Que par les commentaires:
Étape 1: lire leurs les robots fichier. Il est généralement trouvé dans la racine du site, par exemple http://amazon.com/robots.txt. Si l'URL que vous essayez d'accéder est couvert par une
Disallow
sur unUser-Agent
de*
, puis arrêter ici. De les contacter, de leur expliquer en détail ce que vous essayez de faire et demander des moyens/alternatives/webservices qui peut vous fournir les informations dont vous avez besoin. D'autre vous enfreignez les lois et que vous risquez d'obtenir une liste noire par le site et/ou par votre fournisseur de services internet ou pour le pire. Si non, passez à l'étape 2.Étape 2: vérifier si le site en question n'a pas déjà un public webservice disponible, ce qui est beaucoup plus facile à utiliser que de l'analyse d'un ensemble de page HTML. À l'aide d'un webservice, vous obtiendrez exactement les informations que vous cherchez dans un format concis (JSON ou XML) basée sur un simple jeu de paramètres. Regardez autour de ou les contacter pour plus de détails sur toutes les webservices. Si il n'y a pas de chemin, passez à l'étape 3.
Étape 3: apprendre le HTML/CSS/JS de travail, apprendre à travailler en autonome des outils comme Firebug, apprendre à interpréter le HTML/CSS/JS source que vous voyez en faites un clic droit > Afficher la Source de la Page. Mon pari que le site en question utilise JS/Ajax pour charger/remplir les informations que vous souhaitez recueillir. Dans ce cas, vous aurez besoin d'utiliser un analyseur HTML qui est capable d'analyser et d'exécution JS (celui que vous utilisez à savoir ne pas le faire). Ce n'est pas une tâche facile, donc je ne vais pas expliquer en détail jusqu'à ce qu'il est tout à fait clair ce que vous essayez d'atteindre et, si cela est autorisé et si il n'y a pas de plus-facile-à-utiliser des services web disponibles.
OriginalL'auteur BalusC
Vous semblait utiliser la Balançoire HtmlDocument. Il peut ne pas être la meilleure idée jamais.
Je crois que vous avez de meilleurs résultats en utilisant, par exemple, NekoHtml.
OriginalL'auteur Riduidel
Ou une simple bibliothèque, vous pouvez utiliser est jtidy que pouvez nettoyer votre html avant de l'analyser.
Espérons que cette aide.
http://sourceforge.net/projects/jtidy/
Ciao!
OriginalL'auteur gicappa