方法一:

使用 urllib 模块提供的 urlretrieve() 函数。urlretrieve() 方法直接将远程数据下载到本地。

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

说明:

参数 finename 指定了保存本地路径(如果参数未指定,urllib会生成一个临时文件保存数据。)

参数 reporthook 是一个回调函数,当连接上服务器、以及相应的数据块传输完毕时会触发该回调,我们可以利用这个回调函数来显示当前的下载进度。

参数 data 指 post 到服务器的数据,该方法返回一个包含两个元素的(filename, headers)元组,filename 表示保存到本地的路径,header 表示服务器的响应头。

下载多个图片

# -* - coding: UTF-8 -* -  
#!/usr/bin/python  
#下载网页所有图片到本地文件夹  
import os,urllib2,urllib              
import re,urllib2  

def getPage(url):  
    '''''下载文件html代码,找出一楼的核心代码'''  
    opener = urllib2.build_opener()  
    #不加头信息则出现403错误和乱码  
    opener.addheaders = [('User-agent', 'Mozilla/5.0')];  
    htmlAll = opener.open( url ).read()  
    reg1Floor = '<div class="msgfont">(.*?)</div>'  
    html = re.search(reg1Floor,htmlAll)  
    html = html.group()  
    #文件保存编码和文件编辑编码都是utf-8,所以decode一次,不然会出现乱码,但是不影响结果。  
    return html.decode('utf-8')  

def getImg(url):  
    '''''从核心代码中照图图片地址,并且下载保存、命名'''  
    pageHtml = getPage(url)  
    #找到所有图片地址  
    regImg = '<img src="(.*?)"  alt="" />'  
    imglist = re.findall(regImg,pageHtml)  
    dir = r'E:\img'  
    #print imglist  
    for index in xrange(0,len(imglist)):  
        picname = str(index+1) + '.jpg'  
        finename = os.path.join(dir,picname)  
        urllib.urlretrieve(imglist[index], finename)  
        print finename + ' ok!'  


if __name__ == '__main__':  
    getImg('http://topic.csdn.net/u/20101013/11/024465A6-8E16-444C-9A09-DD374D29044C.html')

方法二:

使用urllib的urlopen()函数

实例:

import urllib2
print "downloading with urllib2"
url = 'http://www.pythontab.com/test/demo.zip' 
f = urllib2.urlopen(url) 
data = f.read() 
with open("demo2.zip", "wb") as code:     
    code.write(data)

方法三:

使用requests模块

requests模块下载:https://pypi.python.org/pypi/requests/#downloads

实例:

import requests 
print "downloading with requests"
url = 'http://www.pythontab.com/test/demo.zip' 
r = requests.get(url) 
with open("demo3.zip", "wb") as code:
     code.write(r.content)

results matching ""

    No results matching ""