我正在尝试使用R自动从Crunchbase的OpenDataMap下载公司配置文件图像。我在RCurl中尝试了download.file,GET(在httr包中)和getURLContent,但它们都返回416错误。我知道我必须忘记参数或user_agent,但我无法弄清楚是什么。
以下是测试的示例网址:
http://www.crunchbase.com/organization/google-ventures/primary-image/raw
感谢您提供的任何帮助。
答案 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()