方法一:
使用 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)