urllib.urlopen(url[, data[, proxies]]) :创建⼀个表⽰远程url的类⽂件对象,然后像本地⽂件⼀样操作这个类⽂件对象来获取远程数据。
参数url表⽰远程数据的路径,⼀般是⽹址;
参数data表⽰以post⽅式提交到url的数据(玩过web的⼈应该知道提交数据的两种⽅式:post与get。如果你不清楚,也不必太在意,⼀般情况下很少⽤到这个参数);参数proxies⽤于设置代理。
urlopen返回 ⼀个类⽂件对象,它提供了如下⽅法:
read() , readline() , readlines() , fileno() , close() :这些⽅法的使⽤⽅式与⽂件对象完全⼀样;info():返回⼀个httplib.HTTPMessage 对象,表⽰远程服务器返回的头信息
getcode():返回Http状态码。如果是http请求,200表⽰请求成功完成;404表⽰⽹址未找到;geturl():返回请求的url;代码⽰例:复制代码 代码如下:import urllib
url = \"http://www.baidu.com/\"#urlopen()
sock = urllib.urlopen(url)htmlCode = sock.read()sock.close
fp = open(\"e:/1.html\fp.write(htmlCode)fp.close
#urlretrieve()
urllib.urlretrieve(url, 'e:/2.html')直接将远程数据下载到本地。复制代码 代码如下:
urllib.urlretrieve(url[, filename[, reporthook[, data]]])参数说明:
url:外部或者本地url
filename:指定了保存到本地的路径(如果未指定该参数,urllib会⽣成⼀个临时⽂件来保存数据);
reporthook:是⼀个回调函数,当连接上服务器、以及相应的数据块传输完毕的时候会触发该回调。我们可以利⽤这个回调函数来显⽰当前的下载进度。
data:指post到服务器的数据。该⽅法返回⼀个包含两个元素的元组(filename, headers),filename表⽰保存到本地的路径,header表⽰服务器的响应头。
下⾯通过例⼦来演⽰⼀下这个⽅法的使⽤,这个例⼦将新浪⾸页的html抓取到本地,保存在D:/sina.html⽂件中,同时显⽰下载的进度。
复制代码 代码如下:
import urllib
def callbackfunc(blocknum, blocksize, totalsize): '''回调函数
@blocknum: 已经下载的数据块 @blocksize: 数据块的⼤⼩ @totalsize: 远程⽂件的⼤⼩ '''
percent = 100.0 * blocknum * blocksize / totalsize if percent > 100: percent = 100
print \"%.2f%%\"% percenturl = 'http://www.sina.com.cn'
local = 'd:\\\\sina.html'
urllib.urlretrieve(url, local, callbackfunc)
因篇幅问题不能全部显示,请点此查看更多更全内容