python Web

[python] 
 

玩玩URL(使用urllib)
初学的时候,会有人告诉你你把url当成网址就行了,URL(统一资源定位器),用它可以定位web上的一资源,可以是一个html,一个文档,或是调用以cgi,在
后面的学习,我们会用python的urllib,对url做很多事情,如今的web框架,像django什么的,支持url映射,做出漂亮的url,所以url不只是网址这么简单。

urllib.urlopen可以打看一个远程文件,然后它将返回一个文件对象,这很神奇,不是吗?你可以像操作本地文件一样,使用这个文件对象。比如f.read(),或者f.close()之类的,

你还记得网络课上老师讲过的http头信息吗?用这个得到的文件对象就可以得到,代码如下:

 

[python] 
 
  1. from urllib import urlopen  
  2. f = urlopen('http://www.google.com')  
  3. print f.info()  

 

urlretrieve可以下载文件,并在本地文件中存储一个文件的副本,比如你想把python的主页下载下来,保存到D盘,可以这样:

urlretrieve(‘http://www.python.org’,'D://webpage.html’)
当然还有更好玩的,如果你查查文档,urlretrieve(url[, filename[, reporthook[, data]]])参数是这样的,data参数先不管了,是post到服务器的数据,
reporthook是一个回调函数,这个函数将会在每块数据下载或传输完成后被调用,调用时使用下面三个参数,目前读入的块数,块的字节数,文件的总字节数
所以我们可以通过这个回调函数来显示下载进度,

[python] view plaincopy
 
  1. from urllib import urlretrieve   
  2. def downloadStatusHook(count, block_size, total_size):   
  3.     per = 100.0 * count * block_size / total_size   
  4.     print 'finish %.2f%%' % per   
  5.   
  6. urlretrieve('http://www.sina.com.cn','d://sina.html',reporthook = downloadStatusHook)  

 

说明:
这里用新浪是因为,sina的网站比较大,如果是http://www.python.org,太快了,
per的值可能会大于100

urlretrieve函数返回一个二维元组(filename,headers)其中filename是本地文件的名字,headers包含远程文件信息

posted @ 2013-06-19 20:56  fangFXQ  阅读(591)  评论(0)    收藏  举报