Python urllib的urlretrieve()函數解析

urllib模塊提供的urlretrieve()函數。urlretrieve()方法直接將遠程數據下載到本地。

urlretrieve(url, filename=None, reporthook=None, data=None)

  • 參數filename指定了保存本地路徑(如果參數未指定,urllib會生成一個臨時文件保存數據。)
  • 參數reporthook是一個回調函數,當連接上服務器、以及相應的數據塊傳輸完畢時會觸發該回調,我們可以利用這個回調函數來顯示當前的下載進度。
  • 參數data指post導服務器的數據,該方法返回一個包含兩個元素的(filename, headers) 元組,filename 表示保存到本地的路徑,header表示服務器的響應頭
將baidu的html抓取到本地,保存在''./baidu.html"文件中,同時顯示下載的進度。

#!/usr/bin/env python
# coding=utf-8
import os
import urllib

def cbk(a,b,c):
    '''回調函數
    @a:已經下載的數據塊
    @b:數據塊的大小
    @c:遠程文件的大小
    '''
    per=100.0*a*b/c
    if per>100:
        per=100
    print '%.2f%%' % per

url='http://www.baidu.com'
dir=os.path.abspath('.')
work_path=os.path.join(dir,'baidu.html')
urllib.urlretrieve(url,work_path,cbk)

下面是urlretrieve()下載文件的實例,可以顯示下載進度。

#!/usr/bin/env python
# coding=utf-8
import os
import urllib

def cbk(a,b,c):
    '''回調函數
    @a:已經下載的數據塊
    @b:數據塊的大小
    @c:遠程文件的大小
    '''
    per=100.0*a*b/c
    if per>100:
        per=100
    print '%.2f%%' % per

url='http://www.python.org/ftp/python/2.7.5/Python-2.7.5.tar.bz2'
dir=os.path.abspath('.')
work_path=os.path.join(dir,'Python-2.7.5.tar.bz2')
urllib.urlretrieve(url,work_path,cbk)


urlopen()可以輕鬆獲取遠端html頁面信息,然後通過python正則對所需要的數據進行分析,匹配出想要用的數據,再利用urlretrieve()將數據下載到本地。對於訪問受限或者對連接數有限制的遠程url地址可以採用proxies(代理的方式)連接,如果遠程連接數據量過大,單線程下載太慢的話可以採用多線程下載,這個就是傳說中的爬蟲。

































發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章