使用Python批量下載資料

來源:互聯網
上載者:User

          又是下網頁資料,之前用Python寫過一個,下載的是國家統計局網站上的資訊,地址為:http://blog.csdn.net/liminlu0314/article/details/7300240。

         這次依舊是,不過下載的是Australian Bureau of Statistics的資料,都是xls的表格,網址為:http://www.abs.gov.au。網頁開啟左邊有棵樹目錄,裡面記錄的澳大利亞的行政區名,然後後面有個get data 的連結,不過這棵樹是動態載入的,用戶端沒法擷取到全部的內容,像我這種從來沒有做過網路編程的,臉html都看不懂的人,更不懂ajax了。笨人有笨方法,於是就把樹全部點開,然後把網頁的原始碼儲存下來,整理了一個txt檔案,內容和下面的類似:

<span id="uidynatreeCb3trSLA1">New South Wales<a href="/ausstats/abs@nrp.nsf/lookup/1Main+Features12006-2010" onclick="openWindow('/ausstats/abs@nrp.nsf/lookup/1Main+Features12006-2010','1');"> - Get Data</a></span><br>

         一共有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.comimport sysimport urllibimport re#從讀取的html中解析def ParserXlsUrl(content):    iPost = content.find('%2Exls&')    if iPost == -1:        return ''    strTemp = content[iPost-100:iPost+300]    iPos = strTemp.find('<a href="')    strTemp = strTemp[iPos+9:]        iPos = strTemp.find('&Latest"><')    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#從讀進來的字串解析urldef 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 1if __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吧。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.