Python urlib模块学习


在能使用的各种网络工作库中,功能最强大的是urlliburllib2,它们能够让网络访问文件,就像这些文件存在于电脑上一样,通过一个简单的调用,几乎可以把任何URL所指向的东西用作程序的输入。

1、打开远程文件

可以像打开本地文件一样打开远程文件,不同之处是可以使用只读模式,使用的是来自于urllib模块的urlopen

 

import urllib
baidu = urllib.urlopen('http://www.baidu.com')

 

urlopen返回的类文件对象支持closereadreadlinereadlines方法。

 

baidu = urllib.urlopen('http://www.baidu.com').read()

 

read() , readline() , readlines() , fileno() , close() :这些方法的使用方式与文件对象完全一样;    

info():返回一个httplib.HTTPMessage 对象,表示远程服务器返回的头信息;

getcode():返回Http状态码。如果是http请求,200表示请求成功完成;404表示网址未找到;    geturl():返回请求的url

例子:

import urllib
baidu = urllib.urlopen('http://www.baidu.com')
print 'http header:\n',baidu.info()
print 'http statues:',baidu.getcode()
print 'url:',baidu.geturl()
for line in baidu:
    print line
baidu.close()

运行结果:

http header:

Date: Wed, 18 Jun 2014 08:37:47 GMT

 

Content-Type: text/html; charset=utf-8

 

Connection: Close

 

Vary: Accept-Encoding

 

Set-Cookie: BAIDUID=752AA7ED1CC1CA9B76A8A2928F2BC7A8:FG=1; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com

 

Set-Cookie: BDSVRTM=0; path=/

 

Set-Cookie: H_PS_PSSID=6622_1450_5224_6996_6506_7057_4759_6018_7159_6930_7074_7134_6983_7105; path=/; domain=.baidu.com

 

P3P: CP=" OTI DSP COR IVA OUR IND COM "

 

Cache-Control: private

 

Cxy_all: baidu+8aa8d020a1f90c7e5f2e2962e0a3e349

 

Expires: Wed, 18 Jun 2014 08:37:29 GMT

 

X-Powered-By: HPHP

 

Server: BWS/1.1

 

BDPAGETYPE: 1

 

BDQID: 0xb06118de00023c84

 

BDUSERID: 0

 

 

http statues: 200

url: http://www.baidu.com

 

 

2、获取远程文件

函数urlopen提供一个能从中读取数据的类文件对象。如果希望urllib能够下载文件,并且在本地存储一个文件的副本,那么可以使用urlretrieveurlretrieve返回一个元组(filenameheaders)而不是类文件对象,filename是本地文件的名字(由urllib自动创建),header包含一些远程文件的信息。如果想要为下载的副本指定文件名,可以再urlretrieve函数的第二个参数中给出。

 

urllib.urlretrieve('http://www.python.org','D:\\python_webpage.html')

 

这个语句获取Python的主页并且把它存储在文件D:\\python_webpage.html中。如果没有指定文件名,文件就会放在临时的我只,用open函数可以打开它,但如果完成了对它的操作,用urlcleanup函数,可以清理临时文件,不需要提供参数。

 

urllib.urlretrieve('http://www.python.org','D:\\python_webpage.html')
urllib.urlcleanup()
 

例子:

import urllib
 
def cbk(a,b,c):
    per = 100.0*a*b/c
    if per > 100:
        per = 100
    print '%.2f%%' % per
 
url = 'http://www.sina.com.cn'
local = 'd:\\sina.html'
urllib.urlretrieve(url,local,cbk)

运行结果:

显示下载的百分比

 

3、一些功能

urllib.quote(string[, safe]):对字符串进行编码。参数safe指定了不需要编码的字符;
urllib.unquote(string) :对字符串进行解码;
urllib.quote_plus(string [ , safe ] ) :与urllib.quote类似,但这个方法用'+'来替换' ',而quote'%20'来代替' '
urllib.unquote_plus(string ) :对字符串进行解码;
urllib.urlencode(query[, doseq]):将dict或者包含两个元素的元组列表转换成url参数。例如 字典{'name': 'dark-bull', 'age': 200}将被转换为"name=dark-bull&age=200"
urllib.pathname2url(path):将本地路径转换成url路径;
urllib.url2pathname(path):将url路径转换成本地路径;

例子:

data = 'name = dawn_123%~'
data1 = urllib.quote(data)
print data1
print urllib.unquote(data1)
 
data2 = urllib.quote_plus(data)
print data2
 
print urllib.unquote_plus(data2)
 
data3 = urllib.urlencode({'name':'dark-bull','age':200})
print data3
 
data4 = urllib.pathname2url(r'd:\a\b\c\23.php')
print data4
 
print urllib.url2pathname(data4)

 

运行结果:

name%20%3D%20dawn_123%25%7E
name = dawn_123%~
name+%3D+dawn_123%25%7E
name = dawn_123%~
age=200&name=dark-bull
///D:/a/b/c/23.php
D:\a\b\c\23.php

 

Reference

http://www.blogjava.net/ashutc/archive/2011/03/21/346695.html

Python基础教程》

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值