目录

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进行访问。

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

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

    目录 Python代码 根据需求改写url 报错应对办法 UN Comtrade数据库关于中国台湾的数据 2021/9/28更新:最近有用户反馈下载会出现错误内容如下图,感谢用户@三眼皮138帮忙找出 ...

  2. 爬虫爬取快代理网站动态IP

    爬虫爬取快代理网站动态IP import requests, time from lxml import etree import time import randomcookie = "& ...

  3. 起点中文网月票等字体数据爬取Python

    起点中文网收藏量等数据爬取 1.难点分析 通过chrome开发工具分析我么可以得出结论,月票数量不是html文本,而是通过字体生成出来的数字,这时候的爬虫就要复杂一些了. 2.思路分析 先爬取目标网页 ...

  4. 全国地铁数据爬取-python

    介绍爬取全国地铁站点.地铁线路和发车时刻的方法. 一.两种爬取方法概述 (一)html页面爬取 1. 为了收集全国地铁线路的发车时刻信息,刚开始尝试的方法如下: (1)找到每个城市的地铁官网,如&qu ...

  5. 百度午夜蓝地图瓦片数据爬取--java代码(地图数据篇.15)

    听老人家说:多看美女会长寿 地图之家总目录(建议先查看该内容) 文章末尾处提供保证可运行完整代码包,运行如有问题,可"私信"博主. 效果如下所示: 爬取后的瓦片数据可通过nginx ...

  6. 天地图瓦片数据爬取--java代码(地图数据篇.1)

    听老人家说:多看美女会长寿 地图之家总目录(建议先查看该内容) 文章末尾处提供保证可运行完整代码包,运行如有问题,可"私信"博主. 效果如下所示: 爬取后的瓦片数据可通过nginx ...

  7. 高德地图、google、openstreenmap地图瓦片数据爬取--java代码(地图数据篇.3)

    听老人家说:多看美女会长寿 地图之家总目录(建议先查看该内容) 文章末尾处提供保证可运行完整代码包,运行如有问题,可"私信"博主. 效果如下所示: 爬取后的瓦片数据可通过nginx ...

  8. 腾讯地图影像瓦片数据爬取--java代码(地图数据篇.9)

    听老人家说:多看美女会长寿 地图之家总目录(建议先查看该内容) 文章末尾处提供保证可运行完整代码包,运行如有问题,可"私信"博主. 效果如下所示: 爬取后的瓦片数据可通过nginx ...

  9. 百度地图瓦片数据爬取--java代码(地图数据篇.2)

    听老人家说:多看美女会长寿 地图之家总目录(建议先查看该内容) 文章末尾处提供保证可运行完整代码包,运行如有问题,可"私信"博主. 效果如下所示: 爬取后的瓦片数据可通过nginx ...

最新文章

  1. Win10 | Mac 在server上统一办公
  2. open session and Hibernate事务处理机制
  3. 【Android 逆向】类加载器 ClassLoader ( 使用 DexClassLoader 动态加载字节码文件 | 拷贝 DEX 文件到内置存储 | 加载并执行 DEX 字节码文件 )
  4. 枚举所有进程及其ID
  5. JSON与XML优缺点对比分析
  6. EMI (电磁干扰)
  7. nohub java -jar xx.jar /dev/null 21
  8. Python :h5py 如何对dataset进行重新赋值?
  9. 无人机系统测试软件,无人机航测软件(pix4D)
  10. 白化滤波器 matlab,白化滤波器-matlab-程序.doc
  11. 微信小程序怎么用?小程序有什么用?之501~600
  12. redis通过key模糊搜索_jedis模糊查询key
  13. 游戏的帧率与屏幕的刷新率
  14. 什么是贴片元器件,有哪些优缺点和种类
  15. 【把视频逐帧转换成图片】
  16. 基于本地虚拟机搭建k8s集群
  17. Windows安装TensorFlow教程(国内源安装附上各大镜像网站网址)
  18. Azure虚拟机计费模式
  19. 天锦仪表未收到eecu报文_东风天锦显示“仪表未收到dcu报文”是什么意思?
  20. 曾国藩《挺经》卷十六荷道

热门文章

  1. 通过IDEA快速下载JDK
  2. 安装office未能启动服务器,关于 office 2013 无法安装的解决方法
  3. 使用腾讯云服务器搭建网站
  4. Android开发工程师文集-layout_weight讲解
  5. Yura and Developers
  6. 金山办公2020笔试
  7. MySQL数据库基本语法,数据库设计,事务,多表查询及练习题
  8. 鸿蒙掉不掉凤羽符,装备各部件灌注符的获取方式(和肝燕面基成功,给萌新的福利)...
  9. 51单片机学习——PWM
  10. S.M.A.R.T.