UN Comtrade(联合国商品贸易统计数据库)数据爬取Python代码——使用动态IP

article/2025/8/23 12:56:28

目录

Virtual Private Network

代理服务器

测试代理IP是否生效


上一篇博文UN Comtrade(联合国商品贸易统计数据库)数据爬取Python代码讲了如何使用Python爬取UN comtrade数据,适用于少量数据爬取,由于网站对访问频率和访问量的限制,大量下载数据时访问会被限制,不过访问量限制是针对每个IP的,所以在上一篇文章也提到使用动态改变IP的方法来解决该问题,本文讲述两种改变IP的方法。

Virtual Private Network

虚拟专用网络,不懂的保留首字母大写,虚拟专用网络允许你将计算机连接到远程网络,实现改变IP的功能,通过虚拟专用网络切换上海和南京的IP:

       

(PS:百度直接输入IP可以查看本机IP)

改变了IP就可以刷新UN comtrade网站访问限制。虚拟专用网络有的话可以试试,但是我更推荐使用下面要讲的代理服务器方法。其实现在很多代理都是同时提供代理服务和虚拟专用网络服务。

代理服务器

这是爬虫常用的方法,可以理解为远程有另一台电脑(代理服务器)帮你访问网站。当你需要访问UN数据库时,代理服务器代替你进行访问,收集你需要的信息,随之将其返送给你。通过不断的切换代理服务器,就可以达到不断使用新IP的目的,从而刷新UN comtrade网站的访问限制。

下面基于上一篇博客代码基础上添加使用代理ip功能,使用时需要根据具体代理来补充Get_new_ip_port函数,这里不具体推荐代理品牌,需要推荐可以私信,也可以参考爬虫代理哪家强?十大付费代理详细对比评测出炉!进行选择。

# -*- coding: utf-8 -*-
# 使用代码需自行补充Get_new_ip_port函数,否则使用本机IP访问URLimport json
import requests
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 Get_new_ip_port():"""获取新的代理IP和端口{'http':'ip:port','https':'ip:port'}"""# 这里proxy仅仅是举个例子,具体ip和port使用代理来动态提取,在本函数中调用代理提供的提取ip接口即可proxy = {'http':'225.225.225.225:9999','https':'225.225.225.225:9999'}return proxydef download_url(url, path, header, proxy=None):"""函数功能:通过代理IP下载url链接内容到path路径下参数解释:url: 下载链接path: 本地保存路径header: 设置访问用户代理proxy: 代理IP和端口"""content = requests.get(url, headers=header, proxies=proxy)with open(path,'ab') as outfile:outfile.write(content.content)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 = 0count = 0 # 代理下载次数ip_update = 99 #代理更换频率,每访问ip_update次更换新代理# 创建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)if count%ip_update == 0:proxy = Get_new_ip_port()download_url(url,path,header,proxy)print("Done")# 暂停1秒,保证访问频率为每秒一次time.sleep(1)count += 1if __name__ == '__main__':main()

测试代理IP是否生效

使用代理ip开始爬取数据时,如何测试是否使用了代理ip进行访问而不是本地ip?可以访问http://httpbin.org/ip来检测访问其他网站所用ip是哪个,从而达到测试代理ip是否成功的目的。

import requests
# 直接使用代理提供的ip进行测试,测试时将下面ip和port修改为代理提供的ip和port
proxy = {'http':'225.225.225.225:9999'}
# 调用代理返回ip的函数进行测试
#proxy = Get_new_ip_port()
response=requests.get("http://httpbin.org/ip")
print(response.text)

下图为一次测试结果,使用了辽宁鞍山的ip进行访问。


http://chatgpt.dhexx.cn/article/HsOaEinZ.shtml

相关文章

uni-app点击按钮,生成列表元素

在jQuery里面,动态生成div元素需要进行html的拼接,拼接完成再将拼接的内容放到指定的div里面去,在vue中一般编写代码时都不需要操作DOM元素,那么点击按钮的时候,怎么动态生成自己想要的列表元素? 其实很简…

DOM(二)修改元素内容、属性

一个元素可以修改它的内容、属性和样式。 目录 DOM修改元素 1. 修改内容 2. 修改属性 DOM修改元素 1. 修改内容 (1)获取从修改元素开始标签到结束标签之间的原始的 HTML 内容 元素对象.innerHTML innerHTML 获取元素内容时,原样返回 H…

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

目录 Python代码 根据需求改写url 报错应对办法 UN Comtrade数据库关于中国台湾的数据 2021/9/28更新:最近有用户反馈下载会出现错误内容如下图,感谢用户三眼皮138帮忙找出错误。官方应该是更新API的使用了,在爬取数据是将url中的关键词m…

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的过程看成编码器&…