2017-05-12 5 views
1

J'ai déjà vu des questions similaires et mis en œuvre les solutions, mais je n'arrive toujours pas à comprendre cela. Encore un novice R, donc garder avec moi: j'ai réussi à obtenir une table des discours de Barack Obama de this website utilisant rvest:Extraire un lien hypertexte du tableau HTML avec rvest

library(rvest) 
page <- read_html("http://www.americanrhetoric.com/barackobamaspeeches.htm") 
speeches <- page %>% 
    html_nodes(xpath = '//*[@id="AutoNumber1"]') %>% 
    html_table(fill=TRUE) 
speeches <- speeches[[1]][,2:4] 
head(speeches) 

qui donne:

  X2           X3 X4 
1    <NA>           <NA> <NA> 
2 Delivery Date     Speech Title/Text/MultiMedia Audio 
3  27 July 2004 Democratic National Convention Keynote Speech mp3 
4 06 January 2005 Senate Speech on Ohio Electoral Vote Counting mp3 
5  04 June 2005    Knox College Commencement Speech mp3 
6 15 December 2005    Senate Speech on the PATRIOT Act mp3 

Cependant, je tiens à extraire également le lien hypertexte pour chaque entrée dans la colonne "Discours", qui vit naturellement dans l'attribut href. Je l'ai fait des recherches sur ce joli fond en ligne, et certaines personnes disent également spécifier l'attribut html avec html_attr('href'), mais si je l'inclure dans le code ci-dessus je reçois cette erreur:

Error in UseMethod("xml_attr") : no applicable method for 'xml_attr' applied to an object of class "list"

Une autre personne qui suggère bricoler la fonction réelle avec trace mais cela semble trop impliqué pour quelque chose qui semble assez simple. Une idée d'où je trébuche?

Répondre

2

En utilisant Selector Gadget pour déterminer le nœud, j'extrait les URL avec:

page %>% html_nodes("td:nth-child(2) a") %>% html_attr("href") 
+0

Wow un correctif simple. Merci beaucoup! Y a-t-il une raison pour que XPath ne fonctionne pas dans cette situation? –

+0

Je pense que c'est parce que XPath 'id =" AutoNumber1 "' n'a pas d'attribut 'href'. – Constantinos