使用R下载Crunchbase配置文件图像

时间:2015-03-11 14:09:02

标签: r web-scraping

我正在尝试使用R自动从Crunchbase的OpenDataMap下载公司配置文件图像。我在RCurl中尝试了download.file,GET(在httr包中)和getURLContent,但它们都返回416错误。我知道我必须忘记参数或user_agent,但我无法弄清楚是什么。

以下是测试的示例网址:

http://www.crunchbase.com/organization/google-ventures/primary-image/raw

感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:2)

我认为我提出了一个相当聪明,虽然速度慢的解决方案,与R一起使用。

基本上,我创建了一个无头浏览器,可以从页面到页面导航,下载我需要的crunchbase图像。这让我可以通过“重定向”#39;和javascript阻止我通过一个简单的Curl请求到达图像。

这可能适用于其他刮刮项目。

library(RSelenium)
RSelenium::checkForServer()
startServer()
remDr <- remoteDriver$new()
remDr$open()
# For each url of interest profile_image_url is a list of image urls from crunchbase's open data map.
for(row in 1:length(profile_image_url)){
  print(row) # keep track of where I am
  # if already downloaded, don't do it again
  if(file.exists(paste0("profileimages/",row,".png"))| file.exists(paste0("profileimages/",row,".jpg"))|file.exists(paste0("profileimages/",row,".gif"))){
    next
  }
  # navigate to new page
  remDr$navigate(paste0(profile_image_url[row],"?w=500&h=500"))
  imageurl <- remDr$getCurrentUrl()[[1]]
  # get file extension (to handle pngs and jpgs
  file.ext <- gsub('[^\\]*\\.(\\w+)$',"\\1", imageurl)
  # download image file from 'real' url
  download.file(imageurl, paste0("profileimages/",thiscid,".",file.ext), method="curl")
  # wait ten seconds to avoid rate-limiting
  Sys.sleep(10)
}
remDr$close()