urllib模块
来源:互联网 发布:百度一下淘宝网首页 编辑:程序博客网 时间:2024/05/18 07:35
urllib模块提供接口可以使我们像访问本地文件一样来读取www和ftp上的数据。模块中最重要的两个函数分别是:urlopen()和urlretrieve()。
urllib.urlopen(url[, data[, proxies]]) :
本函数创建一个表示远程url的类文件对象,然后像本地文件一样操作这个类文件对象来获取远程数据。参数url表示远程数据的路径,一般是网址;参数data表示以post方式提交到url的数据;参数proxies用于设置代理。urlopen返回 一个类文件对象,返回的类文件对象提供了如下方法:
- read(), readline(), readlines(), fileno(), close():这些方法的使用方式与文件对象完全一样;
- info():返回一个httplib.HTTPMessage对象,表示远程服务器返回的头信息;
- getcode():返回Http状态码。如果是http请求,200表示请求成功完成;404表示网址未找到;
- geturl():返回请求的url;
简单例子:
01
#! /usr/bin/env python
02
#coding=utf-8
03
import
urllib
04
content
=
urllib.urlopen(
"http://www.baidu.com"
)
05
print
"http header:"
,content.info()
06
print
"http status:"
,content.getcode()
07
print
"url:"
,content.geturl()
08
print
"content:"
09
for
line
in
content.readlines():
10
print
line
urllib.urlretrieve(url[, filename[, reporthook[, data]]]):
urlretrieve方法直接将远程数据下载到本地。参数filename指定了保存到本地的路径(如果未指定该参数,urllib会生成一个临时文件来保存数据);参数reporthook是一个 回调函数,当连接上服务器、以及相应的数据 块传输完毕的时候会触发该回调(即每下载一块就调用一次回调函数)。我们可以利用这个回调函 数来显示当前的下载进度,也可以用于限速,下面的例子会展示。参数data指post到服务器的数据。该方法返回一个包含两个元素的元组(filename, headers),filename表示保存到本地的路径, header表示服务器的响应头。
01
#! /usr/bin/env python
02
# coding: utf-8
03
"""下载文件,并显示下载进度"""
04
import
urllib
05
06
def
DownCall(count,size,total_filesize):
07
"""count为已下载数据块个数,size为数据块的大小,total_filesize为文件总大小"""
08
per
=
100.0
*
count
*
size
/
total_filesize
09
if
per>
100
:
10
per
=
100
11
print
"Already download %d KB(%.2f"
%
(count
*
size
/
1024
,per)
+
"%)"
12
13
url
=
"http://www.research.rutgers.edu/~rohanf/LP.pdf"
14
localfilepath
=
r
"C:\Users\Administrator\Desktop\download.pdf"
15
urllib.urlretrieve(url,localfilepath,DownCall)
urllib中还提供了一些辅助方法,用于对url进行编码、解码。url中是不能出现一些特殊的符号的,有些符号有特殊的用途。我们知道以get方式提交数据的时候,会在url中添加key=value这样的字符串,所以在value中是不允许有'=',因此要对其进行编码;与此同时服务器接收到这些参数的时候,要进行解码,还原成原始的数据。这个时候,这些辅助方法会很有用:
- 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路径转换成本地路径;
现在通过代码总结一下urllib模块:
01
# coding : utf-8
02
import
urllib
03
04
url
=
'http://cnblogs.com'
05
06
#代理服务器
07
proxies
=
{
'http'
:
'http://127.0.0.1:8087'
}
08
#使用代理服务器打开
09
r
=
urllib.urlopen(url,proxies
=
proxies)
10
11
print
r.info()
12
print
r.getcode()
13
print
r.geturl()
14
15
#打开本地文件
16
f
=
urllib.urlopen(url
=
'file:/home/ma6174/a.sh'
)
17
print
f.read()
18
19
#打开ftp
20
#f = urllib.urlopen(url = 'ftp://username:password@ftpaddress')
21
22
#保存网页并显示进度
23
def
cbk(a, b, c):
24
'''
25
a: num
26
b: size
27
c: total
28
'''
29
per
=
100.0
*
a
*
b
/
c
30
if
per >
100
:
31
per
=
100
32
print
'%.2f%%'
%
per
33
34
local
=
'cnblogs.html'
35
urllib.urlretrieve(url,local,cbk)
36
37
#get方法
38
params
=
urllib.urlencode({
'spam'
:
1
,
'eggs'
:
2
,
'bacon'
:
0
})
39
f
=
urllib.urlopen(
"http://www.musi-cal.com/cgi-bin/query?%s"
%
params)
40
print
f.read()
41
42
#post方法
43
params
=
urllib.urlencode({
'spam'
:
1
,
'eggs'
:
2
,
'bacon'
:
0
})
44
f
=
urllib.urlopen(
"http://www.musi-cal.com/cgi-bin/query"
, params)
45
print
f.read()
46
47
#编码解码
48
data
=
'name = ~a+3'
49
50
data1
=
urllib.quote(data)
51
print
data1
# result: name%20%3D%20%7Ea%2B3
52
print
urllib.unquote(data1)
# result: name = ~a+3
53
54
data2
=
urllib.quote_plus(data)
55
print
data2
# result: name+%3D+%7Ea%2B3
56
print
urllib.unquote_plus(data2)
# result: name = ~a+3
57
58
data3
=
urllib.urlencode({
'name'
:
'dark-bull'
,
'age'
:
200
})
59
print
data3
# result: age=200&name=dark-bull
60
61
data4
=
urllib.pathname2url(r
'd:/a/b/c/23.php'
)
62
print
data4
# result: ///D|/a/b/c/23.php
63
print
urllib.url2pathname(data4)
# result: D:/a/b/c/23.php
- urllib模块
- urllib模块
- urllib模块
- urllib模块
- urllib模块
- urllib模块
- urllib模块
- python中的urllib模块
- Python模块学习 --- urllib
- Python模块学习 --- urllib
- Python模块学习 --- urllib
- Python模块学习 ---- urllib
- Python urllib模块学习
- Python模块学习 --- urllib
- Python模块学习 --- urllib
- Python urllib模块
- Python模块学习 --- urllib
- Python模块学习 --- urllib
- 在Android应用中实现查看“附近的人”的功能
- COCOS2D #error "Cannot recognize the target platform; are you targeting an unsupported platform?"
- STL中list的使用
- BZOJ 1901(Zju2112 Dynamic Rankings-区间第k大(修改,在线)-函数式线段树)
- STL之文件读写类fstream
- urllib模块
- 下一代Linux文件系统将如何发展?
- ubuntu如何修改文件夹的权限
- 有时候真怕,时间会说出真心话。
- 如何修改VC应用程序图标
- PHP的parse_str() 函数 和http_build_query()函数
- c# office控件编程 生成文档进行局部限制编辑
- Error detected while processing /root/.vimrc: E518: Unknown option: cursorline
- SVN日常使用指南