R 可以从这种网络应用程序中下载文本吗?

Can R download text from inside this sort of web app?

正在尝试从此网站下载公司简介中的文本

http://www.evca.eu/about-evca/members/member-search/#lsearch

过去我使用 XML 包在类似的任务中取得了很好的成功,但这在这里不起作用,因为我试图掌握的数据在某种动态和单一的内部列表中的元素没有自己的 URL 或其他东西。 不幸的是,我对网页设计知之甚少,所以我不太确定如何解决这个问题。任何建议,手动执行此操作真的很糟糕。谢谢

首先下载Fiddler Web Debugger 或其他类似工具。它将自己置于您的浏览器和网络服务器之间,然后您可以看到发生了什么(也是 dynamic/AJAX 通信)。

运行 它,转到您试图了解的网站并自动执行您想要执行的操作。

例如,如果您打开 http://www.evca.eu/about-evca/members/member-search/#lsearch, enter "a" in the search box and then choose "All" (to get all results), you will see in the Fiddler that browser opens http://www.evca.eu/umbraco/Surface/MemberSearchPage/HandleSearchForm?page=1&rpp=999999 URL 并发送 "Company=a&MemberType=&Country=&X-Requested-With=XMLHttpRequest"。

您可以对 R 执行相同的操作,解析结果,获取一些文本,也许还有一些指向其他内容的链接。

以下 R 中的代码将执行与上述相同的操作:

require('XML')
require(stringr)
library(httr)
r <- POST("http://www.evca.eu/umbraco/Surface/MemberSearchPage/HandleSearchForm?page=1&rpp=999999", 
          body = "Company=a&MemberType=&Country=&X-Requested-With=XMLHttpRequest")
stop_for_status(r)
txt=content(r,"text")

library(stringr)
matches <- str_match_all(txt,"Full company details.*?</h2>")
# remove some rubish from match
companies=gsub("(Full company details)|\t|\n|\r|<[^>]+>",'',matches[[1]])
#remove trainling spaces
companies=gsub("^[ ]+",'',companies)

结果:

> length(companies)
[1] 1148
> head(companies)
     [,1]                                                             
[1,] "350 Investment Partners"                                        
[2,] "350 Investment Partners LLP"                                    
[3,] "360&#176; Capital Management SA"                                
[4,] "360&#176; Capital Partners France - Advisory Company"           
[5,] "360&#176; Capital Partners Italia - Advisory Company"           
[6,] "3i Deutschland Gesellschaft f&#252;r Industriebeteiligungen mbH"