楼主: GAOgzh
2499 6

[问答] 如何用R爬虫UNcomtrade数据 [推广有奖]

  • 0关注
  • 0粉丝

等待验证会员

本科生

0%

还不是VIP/贵宾

-

威望
0
论坛币
8 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
187 点
帖子
17
精华
0
在线时间
105 小时
注册时间
2020-3-5
最后登录
2021-11-30

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
毕业论文,需要搜集国际贸易方面的数据,UNcomtrade上面数据量太大了不能直接下载,所以打算用R把数据弄下来

本科没学过R,真的小白,想请问下照着下面的代码可以加载出UNcomtrade的数据,但是当我把Classification Code从“TOTAL”改成“ALL”(因为要所有商品的数据)之后,就显示不能下载(具体原因如图)。查了一下说是当前json字符串有误,没有正常拼接。想请教一下各位为什么改了之后就没办法显示数据了,且应该怎么调整

下面是从的代码:

library(rjson)
string <- "http://comtrade.un.org/data/cache/partnerAreas.json"
reporters <- fromJSON(file=string)
reporters <- as.data.frame(t(sapply(reporters$results,rbind)))
get.Comtrade <- function(url="http://comtrade.un.org/api/get?"
                         ,maxrec=50000
                         ,type="C"
                         ,freq="A"
                         ,px="HS"
                         ,ps="1993"
                         ,r
                         ,p
                         ,rg="all"
                         ,cc="ALL"(这里之前是TOTAL,可以显示数据
                         ,fmt="json"
)
{
  string<- paste(url
                 ,"max=",maxrec,"&" #maximum no. of records returned
                 ,"type=",type,"&" #type of trade (c=commodities)
                 ,"freq=",freq,"&" #frequency
                 ,"px=",px,"&" #classification
                 ,"ps=",ps,"&" #time period
                 ,"r=",r,"&" #reporting area
                 ,"p=",p,"&" #partner country
                 ,"rg=",rg,"&" #trade flow
                 ,"cc=",cc,"&" #classification code
                 ,"fmt=",fmt        #Format
                 ,sep = ""
  )

  if(fmt == "csv") {
    raw.data<- read.csv(string,header=TRUE)
    return(list(validation=NULL, data=raw.data))
  } else {
    if(fmt == "json" ) {
      raw.data<- fromJSON(file=string)
      data<- raw.data$dataset
      validation<- unlist(raw.data$validation, recursive=TRUE)
      ndata<- NULL
      if(length(data)> 0) {
        var.names<- names(data[[1]])
        data<- as.data.frame(t( sapply(data,rbind)))
        ndata<- NULL
        for(i in 1:ncol(data)){
          data[sapply(data[,i],is.null),i]<- NA
          ndata<- cbind(ndata, unlist(data[,i]))
        }
        ndata<- as.data.frame(ndata)
        colnames(ndata)<- var.names
      }
      return(list(validation=validation,data =ndata))
    }
  }
}

library("rjson")
s1 <- get.Comtrade(r="156", p="0")
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝


微信图片_20200305231557.png (18.62 KB)

微信图片_20200305231557.png

沙发
llb_321 在职认证  发表于 2020-3-28 21:34:22 |只看作者 |坛友微信交流群
UN的数据都可以直接下载PDF或者CSV,为啥要爬呢?一般我们爬的都是无法直接下载的。

使用道具

藤椅
GAOgzh 发表于 2020-3-28 23:53:51 |只看作者 |坛友微信交流群
llb_321 发表于 2020-3-28 21:34
UN的数据都可以直接下载PDF或者CSV,为啥要爬呢?一般我们爬的都是无法直接下载的。
哈哈哈因为之前就是数据量太大了没法直接下载,所以打算爬下来

使用道具

板凳
llb_321 在职认证  发表于 2020-3-29 08:32:46 |只看作者 |坛友微信交流群
理解。
确实cc选择all,返回结果是Result too large: you do not have permissions to access such a large resultset.Maximum resultset is: 100000。问题在于permission,没有这个的话,爬虫也解决不了吧。爬虫不是hacker的水平。哈

使用道具

报纸
GAOgzh 发表于 2020-3-29 21:00:11 |只看作者 |坛友微信交流群
llb_321 发表于 2020-3-29 08:32
理解。
确实cc选择all,返回结果是Result too large: you do not have permissions to access such a larg ...
是的,后来发现爬虫也有最大限制。。。。所以应该是权限问题

使用道具

地板
llb_321 在职认证  发表于 2020-3-29 21:44:18 |只看作者 |坛友微信交流群
我昨天用selenium试了下,也没成。

使用道具

7
看不惯2 发表于 2020-11-24 10:23:08 |只看作者 |坛友微信交流群
llb_321 发表于 2020-3-28 21:34
UN的数据都可以直接下载PDF或者CSV,为啥要爬呢?一般我们爬的都是无法直接下载的。
现在下载不了了

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-12-24 11:41