2016-05-23 76 views
1

以下链接包含巴黎马拉松赛的结果:http://www.schneiderelectricparismarathon.com/us/the-race/results/results-marathon。 我想刮这些结果,但信息是在一个框架内。我知道使用Rvest和Rselenium进行刮擦的基本知识,但我对如何在这种框架内检索数据毫无头绪。为了得到一个想法,我尝试的一件事是:如何使用R从一个框架内的网站刮取数据?

url = "http://www.schneiderelectricparismarathon.com/us/the-race/results/results-marathon" 
site = read_html(url) 
ParisResults = site %>% html_node("iframe") %>% html_table() 
ParisResults = as.data.frame(ParisResults) 

任何帮助解决这个问题将非常受欢迎!

回答

1

结果通过AJAX从以下网址下载:

url="http://www.aso.fr/massevents/resultats/ajax.php?v=1460995792&course=mar16&langue=us&version=3&action=search" 
    table <- url %>% 
    read_html(encoding="UTF-8") %>% 
    html_nodes(xpath='//table[@class="footable"]') %>% 
    html_table() 

PS:我不知道什么是AJAX正好,我才知道的rvest基础

编辑:为了回答评论中的问题:我没有很多网络抓取的经验。如果您只使用非常基本的技术与rvest或xml,您必须了解更多的网站,每个网站都有自己的结构。对于这一个,这里是我是如何做到:

  1. 正如你看到的,在源代码中,你看不到任何结果,因为他们是在iframe和检查代码的时候,你可以看到后“ 2016版结果“:

    class =”iframe-xdm iframe-resultats“data-href =”http://www.aso.fr/massevents/resultats/index.php?langue=us & course = mar16 &版本= 3"

  2. 现在你可以使用这个直接网址:http://www.aso.fr/massevents/resultats/index.php?langue=us&course=mar16&version=2

  3. 但你仍然可以得到结果。然后,您可以使用Chrome开发者工具>网络> XHR。当刷新页面时,您可以看到数据从此URL加载(当您选择Men类别时):http://www.aso.fr/massevents/resultats/ajax.php?course=mar16&langue=us&version=2&action=search&fields%5Bsex%5D=F&limiter=&order=

  4. 现在您可以获得结果!

  5. 如果你想要第二页等,你可以点击页面的编号,然后使用开发工具来看看会发生什么!

+0

谢谢,这解决了我的问题!对于未来的问题,你能告诉我你是如何设法得到这个网址的?我在源代码中找不到它。 – Merijn

+0

我编辑了我的答案,希望有所帮助 –