Je souhaite gratter l'article Wiki suivant: http://fr.wikipedia.org/wiki/periodic_table
de sorte que la sortie de mon code R sera une table avec les colonnes suivantes: p>
(et avec une ligne pour chaque élément chimique, évidemment) p>
J'essaie d'accéder aux valeurs de la page à l'aide du paquet XML, mais semble être bloqué au début. , donc j'apprécierais un exemple sur la façon de le faire (et / ou des liens vers des exemples pertinents) p>
3 Réponses :
Essayez ceci:
library(XML)
URL <- "http://en.wikipedia.org/wiki/Periodic_table"
root <- htmlTreeParse(URL, useInternalNodes = TRUE)
# extract attributes and value of all a tags within 3rd table
f <- function(x) c(xmlAttrs(x), xmlValue(x))
M <- t(xpathSApply(root, "//table[3]/tr/td/a[.!='']", f))[1:118,]
# nicer column names, fix up URLs, fix up Mercury.
colnames(M) <- c("URL", "Name", "Symbol")
M[,1] <- sub("^", "http://en.wikipedia.org", M[,1])
M[,2] <- sub(" .*", "", M[,2])
View(M)
Bonjour Grothendieck - Merveilleuse réponse - Deux pouces vers le haut (et une réponse "choisie"). Merci de votre aide! Meilleur, tal
Je débattais qui choisir comme la "réponse". Et puisque Jeffrey (l'autre réponse) n'a que 18 points de karma (et il fournissait également une réponse viable), j'ai décidé de lui donner la "marque V". Mais votre réponse était très utile. Merci encore! Meilleur, tal
Ont ajouté une deuxième solution basée sur une amélioration de l'expression XPath de Jeffrey et mon code précédent.
@ GABOR: J'ai déjà fait voté votre première réponse, alors tout ce que je peux faire, c'est upvote ce commentaire supplémentaire et ajouter un remerciement écrit pour cela et tous d'autres autres excellentes réponses sur Rhelp.
Je seconde les sentiments de Dwin - vraiment une bonne réponse!
Tal - Je pensais que cela allait être facile. J'allais vous diriger vers Lishtmltable (), ma fonction préférée dans le paquet XML. Heck, sa page d'aide montre même un exemple de raclage d'une page de wikipedia!
mais hélas, ce n'est pas ce que vous voulez: p> Les noms sont partis et l'atomique Nombre tourne dans le symbole. P> SO Retour à la planche à dessin ... P> My Dom Walk-fu n'est pas très fort, donc ce n'est pas joli. Il obtient chaque lien dans une cellule de table, ne conserve que ceux avec un attribut "title" (c'est là que le symbole est) et colle ce que vous voulez dans une donnée. Il obtient également tous les autres liens de ce type sur la page, mais nous sommes chanceux et que les éléments sont les 118 premiers liens de ce type: p>
Bonjour jeffrey, merci pour votre réponse! J'aime voir comment vous l'avez implémenté. Je suggère également que vous ajoutez que vous ajoutez le "DOC <- HTMLTREEPARSE (URL, UTILISATIONINNORNODES = TRUE)" LIGNE Qui manque. Merci beaucoup! Slip
Après plus de pensées (et puisque j'ai fini par utiliser des morceaux de votre code), j'ai décidé de déplacer la "marque V" à votre réponse. J'espère vous voir ici plus - votre réponse était merveilleuse (P.s: quand j'ai commencé, j'ai également pensé à aller avec la fonction ReadhTmLTable, puis j'ai vite trouvé que c'était la limitation). Bravo, Tal
Merci beaucoup - et désolé d'avoir manqué l'appel d'analyse! J'aime aussi la réponse de G. Grothendieck, mais j'apprécie les points!
Devez-vous gratter wikipedia em>? Vous pouvez exécuter cette requête Sparql contre wikidata à la place ( Résultats ): Désolé si cela ne répond pas à votre question directement, mais cela devrait aider les personnes à regarder de la même manière information mais dans une manière propre. p> p>
Pourquoi essayez-vous de fermer la page? Obtenez vos données d'ailleurs, le système périodique ne changera pas fréquemment. Et ceux-ci doivent suivre un certain modèle ...
Si vous n'étiez pas vous, TAL, poser cette question, je serais très méfiant, mais je sais que vos motivations doivent être pure. Cette page est "protégée" et donc même s'il y avait des outils utiles pour R pour accéder à l'interface wiki spéciale, ils ne fonctionnent peut-être pas pour cela. Essayez d'aller à cette page: en.wikipedia.org/w/ ...
Cher Dwin and Al3xa, merci pour vos commentaires et votre vote de confiance dans mes motivations :) ---- - Cher Al3xa, la raison pour laquelle j'ai demandé cette question est à cause des compétences nécessaires pour le compléter, non pas à cause d'un besoin de Le tableau périodique. Cher Dwin - Je cherchais un exemple "neutre" pour poser ma question sur une page Web dans "domaine public". Je n'ai pas remarqué que cette page wiki en particulier était protégée (et donc, pas un candidat principal pour la raclage). Je peux vous assurer que j'ai l'intention d'utiliser ces compétences sur les pages Web que je suis autorisée à fermer :) Meilleur, Tal.
Point linguistique: "gratter" est le verbe de "gratte". Pour «ferrer» quelque chose signifie de le transformer en ordures! «Drapeau» obtient deux 'P - donc' Scrapper une page 'signifie transformer en ordures, "gratter une page" obtient les données de celui-ci!
@ Tal: Je n'ai pas réalisé quelle est une excellente question cela se révélerait être. Deux grandes réponses!
SPACEDMAN - Merci pour la correction (l'anglais est loin d'être ma langue maternelle, toute correction est très appréciée). Dwin - Je suis content de vous lire gagné de cette question aussi :) Cheer, Tal
Chaque page Wikimedia peut être retournée au format XML plutôt que HTML - E.G. en.wikipedia.org/wiki/special:export/periodic_table En savoir plus ici : MediaWiki.org/wiki/Manual:Parameters_to_Special:export