如何用python批量下载数据_使用Python批量下载数据
這次依舊是,不過下載的是Australian Bureau of Statistics的數據,都是xls的表格,網址為:http://www.abs.gov.au。網頁打開左邊有棵樹目錄,里面記錄的澳大利亞的行政區名,然后后面有個get data 的鏈接,不過這棵樹是動態加載的,客戶端沒法獲取到全部的內容,像我這種從來沒有做過網絡編程的,臉html都看不懂的人,更不懂ajax了。笨人有笨方法,于是就把樹全部點開,然后把網頁的源代碼保存下來,整理了一個txt文件,內容和下面的類似:
New South Wales - Get Data
一共有1665行,格式都和上面的類似。可以看到get data的鏈接是/ausstats/abs@nrp.nsf/lookup/1Main+Features12006-2010,然后就是從上面的字符串中提取get data的鏈接,獲取連接后,使用urllib獲取url地址的html內容。
然后再從獲取的html中查找xls的下載地址,知道xls的下載地址,使用urlretrieve函數保存到本地即可。整個代碼72行,如下:
# -*- coding:gb2312 -*-
# 有問題請聯系我 liminlu0314@gmail.com
import sys
import urllib
import re
#從讀取的html中解析下載地址
def ParserXlsUrl(content):
iPost = content.find('%2Exls&')
if iPost == -1:
return ''
strTemp = content[iPost-100:iPost+300]
iPos = strTemp.find('<')
strTemp = strTemp[:iPos+7]
#/AUSSTATS/freenrp.nsf/log?openagent&Region%5F1%2Exls&1&2006%2D2010%20National%20Regional%20Profile&CCAA9316217A9E75CA25793B001332FA&0&2006%2D2010&04%2E11%2E2011&Latest
return 'http://www.abs.gov.au' + strTemp
#從讀進來的字符串解析url
def Save2Xls(lines):
iPos = lines.find('>')
strTmp = lines[iPos+1:]
iPos = strTmp.find('<')
strName = strTmp[:iPos] #取出Name
iPos = strTmp.find('"')
strTmp = strTmp[iPos+1:]
iPos = strTmp.find('"')
strTmp = strTmp[:iPos]
#/ausstats/abs@nrp.nsf/lookup/1Main+Features12006-2010
iPos = strTmp.find('lookup/')
strTmp = strTmp[iPos+7:]
iPos = strTmp.find('Main+')
strIdCode = strTmp[:iPos]
strStart = 'http://www.abs.gov.au/AUSSTATS/abs@nrp.nsf/DetailsPage/'
strMid = '2006-2010?OpenDocument&tabname=Details&prodno='
strEnd = '&issue=2006-2010&num=&view=&'
strUrl = strStart + strIdCode + strMid + strIdCode + strEnd
html = urllib.urlopen(strUrl)#打開連接
content = html.read()#獲取頁面內容
strUrlXls = ParserXlsUrl(content)
if strUrlXls == '':
return 0
strXlsDir = './Xls/'
strXls = strXlsDir + strName + '_' + strIdCode + '.xls'
urllib.urlretrieve(strUrlXls, strXls) #開始下載
return 1
if __name__ =="__main__":
f = open('GetUrl.htm', 'r')
alllines = f.readlines()
f.close()
index = 0
for eachline in alllines:
Save2Xls(eachline)
index = index + 1
print "current is %d of 1665, precent %d%%" %(index, (int)(index / 1665.0 * 100))之后程序寫完后,發現不知道下載到什么地方了,又加了個進度信息。喜歡python,同樣的代碼用C++我不敢想象,還是Python吧。
總結
以上是生活随笔為你收集整理的如何用python批量下载数据_使用Python批量下载数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 刺激战场金币开箱子在哪里
- 下一篇: python计算圆周率_用python计