日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

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

發(fā)布時(shí)間:2023/12/14 python 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 UN Comtrade(联合国商品贸易统计数据库)数据爬取Python代码——使用动态IP 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

Virtual Private Network

代理服務(wù)器

測(cè)試代理IP是否生效


上一篇博文UN Comtrade(聯(lián)合國(guó)商品貿(mào)易統(tǒng)計(jì)數(shù)據(jù)庫(kù))數(shù)據(jù)爬取Python代碼講了如何使用Python爬取UN comtrade數(shù)據(jù),適用于少量數(shù)據(jù)爬取,由于網(wǎng)站對(duì)訪問(wèn)頻率和訪問(wèn)量的限制,大量下載數(shù)據(jù)時(shí)訪問(wèn)會(huì)被限制,不過(guò)訪問(wèn)量限制是針對(duì)每個(gè)IP的,所以在上一篇文章也提到使用動(dòng)態(tài)改變IP的方法來(lái)解決該問(wèn)題,本文講述兩種改變IP的方法。

Virtual Private Network

虛擬專用網(wǎng)絡(luò),不懂的保留首字母大寫,虛擬專用網(wǎng)絡(luò)允許你將計(jì)算機(jī)連接到遠(yuǎn)程網(wǎng)絡(luò),實(shí)現(xiàn)改變IP的功能,通過(guò)虛擬專用網(wǎng)絡(luò)切換上海和南京的IP:

? ? ? ?

(PS:百度直接輸入IP可以查看本機(jī)IP)

改變了IP就可以刷新UN comtrade網(wǎng)站訪問(wèn)限制。虛擬專用網(wǎng)絡(luò)有的話可以試試,但是我更推薦使用下面要講的代理服務(wù)器方法。其實(shí)現(xiàn)在很多代理都是同時(shí)提供代理服務(wù)和虛擬專用網(wǎng)絡(luò)服務(wù)。

代理服務(wù)器

這是爬蟲(chóng)常用的方法,可以理解為遠(yuǎn)程有另一臺(tái)電腦(代理服務(wù)器)幫你訪問(wèn)網(wǎng)站。當(dāng)你需要訪問(wèn)UN數(shù)據(jù)庫(kù)時(shí),代理服務(wù)器代替你進(jìn)行訪問(wèn),收集你需要的信息,隨之將其返送給你。通過(guò)不斷的切換代理服務(wù)器,就可以達(dá)到不斷使用新IP的目的,從而刷新UN comtrade網(wǎng)站的訪問(wèn)限制。

下面基于上一篇博客代碼基礎(chǔ)上添加使用代理ip功能,使用時(shí)需要根據(jù)具體代理來(lái)補(bǔ)充Get_new_ip_port函數(shù),這里不具體推薦代理品牌,需要推薦可以私信,也可以參考爬蟲(chóng)代理哪家強(qiáng)?十大付費(fèi)代理詳細(xì)對(duì)比評(píng)測(cè)出爐!進(jìn)行選擇。

# -*- coding: utf-8 -*- # 使用代碼需自行補(bǔ)充Get_new_ip_port函數(shù),否則使用本機(jī)IP訪問(wèn)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僅僅是舉個(gè)例子,具體ip和port使用代理來(lái)動(dòng)態(tài)提取,在本函數(shù)中調(diào)用代理提供的提取ip接口即可proxy = {'http':'225.225.225.225:9999','https':'225.225.225.225:9999'}return proxydef download_url(url, path, header, proxy=None):"""函數(shù)功能:通過(guò)代理IP下載url鏈接內(nèi)容到path路徑下參數(shù)解釋:url: 下載鏈接path: 本地保存路徑header: 設(shè)置訪問(wèn)用戶代理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}#-----------------獲取所有國(guó)家的名單和國(guó)家對(duì)應(yīng)編碼號(hào)-----------------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 = [] #存放國(guó)家編碼號(hào)text = [] #存放國(guó)家名稱for i in results:id.append(i.get("id"))text.append(i.get("text"))# 刪除第一個(gè)元素,第一個(gè)元素是allnew_id = id[1:]new_text = text[1:]#------------------------------------------------------------------# 若運(yùn)行中斷,繼續(xù)下載僅需要更改下面三個(gè)參數(shù)start_year = 2003stop_year = 2019begin_id = 0count = 0 # 代理下載次數(shù)ip_update = 99 #代理更換頻率,每訪問(wèn)ip_update次更換新代理# 創(chuàng)建data文件夾存放下載數(shù)據(jù)if not os.path.exists("./data"):os.makedirs("./data")for year in range(start_year, stop_year+1):# 創(chuàng)建年份文件夾將數(shù)據(jù)按年份分開(kāi)存放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秒,保證訪問(wèn)頻率為每秒一次time.sleep(1)count += 1if __name__ == '__main__':main()

測(cè)試代理IP是否生效

使用代理ip開(kāi)始爬取數(shù)據(jù)時(shí),如何測(cè)試是否使用了代理ip進(jìn)行訪問(wèn)而不是本地ip?可以訪問(wèn)http://httpbin.org/ip來(lái)檢測(cè)訪問(wèn)其他網(wǎng)站所用ip是哪個(gè),從而達(dá)到測(cè)試代理ip是否成功的目的。

import requests # 直接使用代理提供的ip進(jìn)行測(cè)試,測(cè)試時(shí)將下面ip和port修改為代理提供的ip和port proxy = {'http':'225.225.225.225:9999'} # 調(diào)用代理返回ip的函數(shù)進(jìn)行測(cè)試 #proxy = Get_new_ip_port() response=requests.get("http://httpbin.org/ip") print(response.text)

下圖為一次測(cè)試結(jié)果,使用了遼寧鞍山的ip進(jìn)行訪問(wèn)。

總結(jié)

以上是生活随笔為你收集整理的UN Comtrade(联合国商品贸易统计数据库)数据爬取Python代码——使用动态IP的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。