2015-11-13 3 views
1

Простое применение пакета rvest: Я пытаюсь очистить класс html-ссылок с сайта.Webscraping в R, доступ к узлам html

Этот код дает мне то, что выглядит как правильные узлы с сайта:

library(rvest) 
library(magrittr) 

foo <- "http://www.realclearpolitics.com/epolls/2010/house/2010_elections_house_map.html" %>% 
      read_html 

Отдельно я нашел нужные узлы, используя селектор CSS:

foo %>% 
    html_nodes("#states td") %>% 
    extract(2:4) 

который возвращает

{xml_nodeset (3)} 
[1] <td>\n <a class="dem" href="/epolls/2010/house/ar/arkansas_4th_district_rankin_vs_ross-1343.html">\n <span>AR4</span>\n </a>\n</td> 
[2] <td>\n <a class="dem" href="/epolls/2010/house/ct/connecticut_1st_district_brickley_vs_larson-1713.html">\n <span>CT1</span>\n </a>\n</td> 
[3] <td>\n <a class="dem" href="/epolls/2010/house/ct/connecticut_2nd_district_peckinpaugh_vs_courtney-1715.html">\n <span>CT2</span>\n </a>\n</td> 

Хорошо, поэтому атрибут href - это то, что я ищу. Но это

foo %>% 
    html_nodes("#states td") %>% 
    extract(2:4) %>% 
    html_attr("href") 

возвращает

[1] NA NA NA 

Как я могу получить доступ основные ссылки?

+2

try 'foo%>% html_nodes (" # states td a ")%>% extract (2: 4)%>% html_attr (" href ")' – Jay

+1

@jay, вы должны сделать ответ. tomw: вы не нацеливаетесь на якорь, а решение Jay. – hrbrmstr

ответ

1

Использование xml_children(), вы могли бы сделать:

foo %>% 
    html_nodes('#states td') %>% 
    xml_children %>% 
    html_attr('href') %>% 
    extract(2:4) 

Возвращает:

[1] "/epolls/2010/house/ar/arkansas_4th_district_rankin_vs_ross-1343.html"    
[2] "/epolls/2010/house/ct/connecticut_1st_district_brickley_vs_larson-1713.html"  
[3] "/epolls/2010/house/ct/connecticut_2nd_district_peckinpaugh_vs_courtney-1715.html" 

Вы могли бы поставить extract перед html_attr, и, возможно, некоторые другие последовательности могут работать тоже.

Смежные вопросы