UN Comtrade(联合国商品贸易统计数据库)数据爬取Python代码

article/2025/8/24 3:33:20

目录

Python代码

根据需求改写url

报错应对办法

UN Comtrade数据库关于中国台湾的数据


2021/9/28更新:最近有用户反馈下载会出现错误内容如下图,感谢用户@三眼皮138帮忙找出错误。官方应该是更新API的使用了,在爬取数据是将url中的关键词max放到最前面即可避免错误,以下代码都已经更新。

以下为原文:

最近需要从UN Comtrade数据库下载一批数据,2003-2019年各国进口产品金额,产品类别使用SITC3分类标准,打算按年份分17次下载,结果提示普通用户单次最大下载量为10000,所以只能将Reporters分别选中每个国家下载,这样一共要下载256*17次,并不现实。借助UN Comtrade提供的API,写了一份代码自动下载数据。

(该数据已经下载好了,需要可以留下邮箱。如果急需其他数据或者代码使用困难,也可私信我帮忙代下、对数据筛选处理等。)

Python代码

具体代码如下。经过测试,windows系统linux系统都可以拷贝到本地直接用python3.x运行。如果需要下载其他数据,更换代码里的url链接的参数即可,url的格式参考官方说明Data API (v2) | UN Comtrade: International Trade Statistics,下一段也进行了简单说明。

# -*- coding: utf-8 -*-import json
import urllib.request
from random import randint
import time
import osUSER_AGENTS = ["Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; AcooBrowser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)","Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506)","Mozilla/4.0 (compatible; MSIE 7.0; AOL 9.5; AOLBuild 4337.35; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)","Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)","Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)","Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.0.3705; .NET CLR 1.1.4322)","Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30)","Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/523.15 (KHTML, like Gecko, Safari/419.3) Arora/0.3 (Change: 287 c9dfb30)","Mozilla/5.0 (X11; U; Linux; en-US) AppleWebKit/527+ (KHTML, like Gecko, Safari/419.3) Arora/0.6","Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.2pre) Gecko/20070215 K-Ninja/2.1.1","Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9) Gecko/20080705 Firefox/3.0 Kapiko/3.0","Mozilla/5.0 (X11; Linux i686; U;) Gecko/20070322 Kazehakase/0.4.5","Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.8) Gecko Fedora/1.9.0.8-1.fc10 Kazehakase/0.5.6","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.20 (KHTML, like Gecko) Chrome/19.0.1036.7 Safari/535.20","Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; fr) Presto/2.9.168 Version/11.52",]def download_url(url, path, header):"""函数功能:下载url链接内容到path路径下参数解释:url: 下载链接path: 本地保存路径header: 设置访问用户代理"""content = urllib.request.Request(url, headers=header)with urllib.request.urlopen(content) as file:with open(path,'wb') as outfile:outfile.write(file.read())def main():random_agent = USER_AGENTS[randint(0, len(USER_AGENTS)-1)]header = {'User-Agent':random_agent}#-----------------获取所有国家的名单和国家对应编码号-----------------if not os.path.exists("./reporterAreas.json"):download_url("https://comtrade.un.org/Data/cache/reporterAreas.json","./reporterAreas.json",header)with open('reporterAreas.json', 'r',encoding='utf_8_sig') as f:data = json.load(f)results = data.get("results")id = [] #存放国家编码号text = [] #存放国家名称for i in results:id.append(i.get("id"))text.append(i.get("text"))# 删除第一个元素,第一个元素是allnew_id = id[1:]new_text = text[1:]#------------------------------------------------------------------# 若运行中断,继续下载仅需要更改下面三个参数start_year = 2003stop_year = 2019begin_id = 0 #当前年份已下载文件数目# 创建data文件夹存放下载数据if not os.path.exists("./data"):os.makedirs("./data")for year in range(start_year, stop_year+1):# 创建年份文件夹将数据按年份分开存放if not os.path.exists("./data/" + str(year)):os.makedirs("./data/" + str(year))for i in range(begin_id, len(new_id)):random_agent = USER_AGENTS[randint(0, len(USER_AGENTS)-1)]print(random_agent)header = {'User-Agent':random_agent}url = "http://comtrade.un.org/api/get?max=100000&r=" + str(new_id[i]) + "&freq=A&ps=" + str(year) + "&px=S3&p=0&rg=1&cc=AG3&fmt=csv&type=C"path = "./data/" + str(year) + "/" + new_text[i] + ".csv"print("Downing from " + url + " to " + path)download_url(url,path,header)print("Done")# 暂停36秒,保证一小时访问100次time.sleep(36)if __name__ == '__main__':main()

根据需求改写url

url的格式为http://comtrade.un.org/api/get?parameters,其中parameters每个变量含义:

r:reportering area,选择所需要的目标国家;

freq:选择数据为年度或月度;

ps:选择所需要的年份;

px:选择分类标准,如常用的SITC Revision 3为S3;

p:partner area,选择所需要的对象国家,如需要中国与俄罗斯的出口额,则目标为中国,对象为俄罗斯;

rg:选择进口或出口;

cc:选择产品代码;

fmt:选择输出文件格式,csv或json;

max:最大返回数据量;

type:选择贸易类型,产品或服务。

举例:“中国2015年与其他国家或地区在SITC Rev.3标准下所有3位编码产品进口总额”

对应的url为“http://comtrade.un.org/api/get?max=100000&r=156&freq=A&ps=2015&px=S3&p=0&rg=1&cc=AG3&fmt=csv&type=C”。(直接点击跳转就可以下载)

报错应对办法

运行过程中会遇到“RemoteDisconnected: Remote end closed connection without response”,“409 Conflict”等错误,参考【Python】py3.6请求网站时报错:http.client.RemoteDisconnected: Remote end closed connection without response使用更换User Agent的方法来避免同一用户频繁访问被限制,有一些作用但并不能避免错误继续产生。问题根源在UN Comtrade API使用的限制,网站明确说明了普通用户每小时只能发送100次请求,否则就会报409的错。所以将请求速度通过sleep函数限制到36秒一次,1小时100次,但依然会报409的错误。因此想要避免这个错误,就必须使用一些动态改变IP的方法,可以自行去搜索或参考本人另一篇博文UN Comtrade(联合国商品贸易统计数据库)数据爬取Python代码——使用动态IP。如果数据量不是特别大,一千次下载量以内,断断续续也是很快就可以下载完的,代码也有中断后继续下载的功能(修改起始年份和当前年份已下载文件数即可)。

UN Comtrade数据库关于中国台湾的数据

如果下载完数据仔细观察,会发现找不到台湾的数据,而香港(编号344,China,Hong Kong SAR)和澳门(编号446,China,Macao SAR)的数据是很容易找到的,SAR就是Special Administration Region 特别行政区的意思。其实台湾的数据就是编号490,Other Asia,nes(not elsewhere specified,他处未列的,不另详述)的数据。以2012,2013年UN Comtrade数据库内中国与Other Asia,nes进出口总额和中国统计年鉴数据库内中国与中国台湾进出口总额对比来说明。

UN Comtrade:

中国统计年鉴:

对比完应该就可以确定Other Asia,nes就是中国台湾,希望大家使用的时候能够注意这个问题。当然也便于解决和其他数据一起使用时的名称匹配问题,如UNCTAD(联合国贸易和发展会议)数据库就明确标出了中国台湾省(China,Taiwan Province)。


http://chatgpt.dhexx.cn/article/4L5jEFH8.shtml

相关文章

uni-app中动态修改伪类元素的样式

1.首先定义一个变量 2.在伪元素的父元素上面动态添加style,注意这个 设置的变量 --state 因为下面是 var 调用的所以需要加两个杠. 3.使用var调用变量 --state

selenium的常见表单元素操作

selenium的表单相关操作 selenium是浏览器自动化测试框架,是一个用于Web应用程序测试的工具,可以直接运行在浏览器当中,并可以驱动浏览器执行指定的动作,如点击、下拉、填充数据、删除cookie等操作,还可以获取浏览器当…

Web API:ResizeObserver——监听元素大小的变化

前言 最近突然发现了ResizeObserver 感觉挺有用的就简单学习了一下。 众所周知window.resize事件能帮我们监听窗口大小的变化。但是reize事件会在一秒内触发将近60次,所以很容易在改变窗口大小时导致性能问题。换句话说,window.resize事件通常是浪费的…

法规标准-UN R157标准解读

文章目录 UN R157是做什么的?ALKS系统一般要求动态驾驶任务本车道内行驶允许越过车道线执行LCP变道程序在EM期间进行回避车道交叉为应急车辆和执法车辆形成通道部分进入相邻车道,以绕过部分阻塞车道的障碍物 激活系统控制车速跟车停止前车减速、切入、切…

图像分割UNet系列------Res-UNet详解

图像分割unet系列------Res-UNet详解 1、Res-UNet要解决的问题2、Res-UNet主要网络结构3、引发的思考 Res-UNet发表于2018年,是UNet非常重要的改进版本之一。当然,Res-UNet同样是应用在医学图像分割领域-----视网膜血管分割。 1、Res-UNet要解决的问题 作…

U-Net

(1)使用全卷积神经网络。(全卷积神经网络就是卷积取代了全连接层,全连接层必须固定图像大小而卷积不用,所以这个策略使得,你可以输入任意尺寸的图片,而且输出也是图片,所以这是一个端到端的网络。 整个网络有23层卷积层…

Pytorch实战系列(一)——CNN之UNet代码解析

目录 1.UNet整体结构理解 1.1 UNet结构拆解 1.1.1 卷积层主体:两次卷积操作 1.1.2 左部分每一层:下采样卷积层 1.1.3 右部分每一层:上采样中部分跳跃连接卷积层 1.1.4 输入层和输出层 1.2 UNet结构融合 2.UNet Pytorch代码理解 2.1 …

快速理解Unet的网络结构

Unet 前言FCNUnet 前言 U-Net和FCN非常的相似,U-Net比FCN稍晚提出来,但都发表在2015年,和FCN相比,U-Net的第一个特点是完全对称,也就是左边和右边是很类似的,而FCN的decoder相对简单,只用了一个…

Unet网络解析

1 Unet网络概述 论文名称:U-Net: Convolutional Networks for Biomedical Image Segmentation 发表会议及时间 :MICCA ( 国际医学图像计算和 计算机辅 助干预会 议 ) 2 0 1 5 Unet提出的初衷是为了解决医学图像分割的问题。 Unet网络非常的简单&…

分割网络模型(FCN、Unet、Unet++、SegNet、RefineNet)

1、FCN https://blog.csdn.net/bestrivern/article/details/89523329《Fully Convolutional Networks for Semantic Segmentation》https://arxiv.org/abs/1411.4038 FCN是不含全连接层的全卷积网络,对图像进行像素级的分类,解决了图像的语义分割问题&a…

UNet网络解读

UNet解读 UNet论文UNet的简介代码解读DoubleConv模块Down模块Up模块OutConv模块 整个UNet参考资料 UNet论文 UNet论文地址 UNet的简介 UNet是一个对称的网络结构,左侧为下采样,右侧为上采样;下采样为encoder,上采样为decoder;四…

UNet网络

UNet 本博客主要对UNet网络进行讲解,以下为文章目录: UNet 原论文讲解网络结构数据集介绍评价指标损失计算代码 本文参考资料如下: UNet原论文 https://arxiv.org/pdf/1505.04597.pdfU-Net网络结构讲解(语义分割) https://www.bilibili.c…

U-Net网络详解

U-Net: Convolutional Networks for Biomedical Image Segmentation 原文地址:https://zhuanlan.zhihu.com/p/43927696 前言 U-Net是比较早的使用全卷积网络进行语义分割的算法之一,论文中使用包含压缩路径和扩展路径的对称U形结构在当时非常具有创新…

U-Net网络

U-Net普遍应用在生物医学影像领域,其在架构设计和其他利用卷积神经网络基于像素的图像分割方面更成功,它甚至对有限数据集的图像更有效。U-Net的命名源自它的结构,它的网络结构可视化的结果很像一个字母U。 U-NET网络性能机制 U-Net 融合了 …

【Unet系列】Unet Unet++

文章目录 U-net概述细节部分1、结构的解析2、一些小点 result Unet概述细节部分resultsummary U-net U-Net是一篇基本结构非常好的论文,主要是针对生物医学图片的分割,而且,在今后的许多对医学图像的分割网络中,很大一部分会采取…

图像分割UNet系列------UNet详解

图像分割unet系列------UNet详解 1、UNet网络结构2、UNet网络结构高性能的原因分析3、医学图像使用UNet网络结构 UNet最早发表在2015的MICCAI上,到2020年中旬的引用量已经超过了9700多次,估计现在都过万了,从这方面看足以见得其影响力。当然&…

UNet、UNet++、UNet3+系列

一、unet 简介 继承FCN的思想,继续进行改进。但是相对于FCN,有几个改变的地方,U-Net是完全对称的,且对解码器(应该自Hinton提出编码器、解码器的概念来,即将图像->高语义feature map的过程看成编码器&…

unet网络详解

Unet 参考文献:U-Net: Convolutional Networks for Biomedical Image Segmentation作者:Olaf Ronneberger, Philipp Fischer, and Thomas Brox 什么是Unet模型 Unet是一个优秀的语义分割模型,其主要执行过程与其它语义分割模型类似。与CNN…

Unet相关介绍

老师的bloghttps://zhuanlan.zhihu.com/p/370931792。写的比我这个好,233 Unet是在Fcn基础上提出的一种应用于医学影响的分割网络。医学影像的特点是1、数据集小。2、单张图片大。 由于以上医疗影像的特点,我们无法直接用Fcn进行分割学习。一个德国团队…

UNET详解和UNET++介绍(零基础)

一背景介绍 背景介绍: 自2015年以来,在生物医学图像分割领域,U-Net得到了广泛的应用,目前已达到四千多次引用。至今,U-Net已经有了很多变体。目前已有许多新的卷积神经网络设计方式,但很多仍延续了U-Net的核…