python Web
玩玩URL(使用urllib)
初学的时候,会有人告诉你你把url当成网址就行了,URL(统一资源定位器),用它可以定位web上的一资源,可以是一个html,一个文档,或是调用以cgi,在
后面的学习,我们会用python的urllib,对url做很多事情,如今的web框架,像django什么的,支持url映射,做出漂亮的url,所以url不只是网址这么简单。
urllib.urlopen可以打看一个远程文件,然后它将返回一个文件对象,这很神奇,不是吗?你可以像操作本地文件一样,使用这个文件对象。比如f.read(),或者f.close()之类的,
你还记得网络课上老师讲过的http头信息吗?用这个得到的文件对象就可以得到,代码如下:
- from urllib import urlopen
- f = urlopen('http://www.google.com')
- print f.info()
urlretrieve可以下载文件,并在本地文件中存储一个文件的副本,比如你想把python的主页下载下来,保存到D盘,可以这样:
urlretrieve(‘http://www.python.org’,'D://webpage.html’)
当然还有更好玩的,如果你查查文档,urlretrieve(url[, filename[, reporthook[, data]]])参数是这样的,data参数先不管了,是post到服务器的数据,
reporthook是一个回调函数,这个函数将会在每块数据下载或传输完成后被调用,调用时使用下面三个参数,目前读入的块数,块的字节数,文件的总字节数
所以我们可以通过这个回调函数来显示下载进度,
- from urllib import urlretrieve
- def downloadStatusHook(count, block_size, total_size):
- per = 100.0 * count * block_size / total_size
- print 'finish %.2f%%' % per
- urlretrieve('http://www.sina.com.cn','d://sina.html',reporthook = downloadStatusHook)
说明:
这里用新浪是因为,sina的网站比较大,如果是http://www.python.org,太快了,
per的值可能会大于100
urlretrieve函数返回一个二维元组(filename,headers)其中filename是本地文件的名字,headers包含远程文件信息
浙公网安备 33010602011771号