urllib模塊提供的urlretrieve()函數。urlretrieve()方法直接將遠程數據下載到本地。
urlretrieve(url, filename=None, reporthook=None, data=None)
- 參數filename指定了保存本地路徑(如果參數未指定,urllib會生成一個臨時文件保存數據。)
- 參數reporthook是一個回調函數,當連接上服務器、以及相應的數據塊傳輸完畢時會觸發該回調,我們可以利用這個回調函數來顯示當前的下載進度。
- 參數data指post導服務器的數據,該方法返回一個包含兩個元素的(filename, headers) 元組,filename 表示保存到本地的路徑,header表示服務器的響應頭
#!/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(代理的方式)連接,如果遠程連接數據量過大,單線程下載太慢的話可以採用多線程下載,這個就是傳說中的爬蟲。