您的位置:首页 > 编程语言 > Python开发

python学习笔记:urllib模块

2015-03-05 00:00 423 查看
摘要: urllib.urlopen
urllib.urlretrieve

urllib模块的作用是:使我们可以像访问本地文件一样读取www和ftp上的数据

调用方法:

import urllib


urllib模块的方法:

1.urllib.urlopen(url[,data[,proxies]]) 打开一个url,返回一个文件对象,该对象可进行对象的操作。

page=urllib.urlopen('http://www.zhihu.com/')

该指令创建了一个标识远程url的类文件对象。

urllib.urlopen(url[,data[,proxies]])中,参数url表示远程数据的路径,也就是网址。参数data表示以post方式提交到url的数据。参数proxies用于设置代理。

urllib.urlopen(url)返回的类文件,有以下操作方法:

read() , readline() , readlines() , fileno() , close() #这些方法的使用方式与文件对象完全一样;
info()#返回一个httplib.HTTPMessage 对象,表示远程服务器返回的头信息;
getcode()#返回Http状态码。如果是http请求,200表示请求成功完成;404表示网址未找到;
geturl()#返回请求的url;


2.urllib.urlretrieve(url,[,filename[,reporthook[,data]]])将远程数据下载到本地。

其中url为路径(可经过正则匹配后)。filename为想要保存的文件名。reporthook为回调函数,当连接上服务器以及相应的数据处理完之后会触发整个回调函数(可用来显示当前进度)

附带一个自己做的爬虫程序如下:

<!-- lang: python -->
#!/usr/bin/python
<!-- lang: python -->
#coding:utf-8
<!-- lang: python -->

<!-- lang: python -->
import urllib<!-- lang: python -->
import re
<!-- lang: python -->

<!-- lang: python -->
def getHtml(url):
<!-- lang: python -->
page = urllib.urlopen(url)
<!-- lang: python -->
html = page.read()
<!-- lang: python -->
return html
<!-- lang: python -->

<!-- lang: python -->
def getImg(url):
<!-- lang: python -->
reg="""
<!-- lang: python -->
src="(.*?\.jpg)"
<!-- lang: python -->
"""
<!-- lang: python -->
re_c = re.compile(reg,re.X)
<!-- lang: python -->
imglist = re_c.findall(html)
<!-- lang: python -->
return imglist
<!-- lang: python -->

<!-- lang: python -->
def dwlImg(imglist):
<!-- lang: python -->

<!-- lang: python -->
def cbf(blocknum,blocksize,totalsize):
<!-- lang: python -->
"""
<!-- lang: python -->
回调函数
<!-- lang: python -->
@blocknum : 已经下载的数据块
<!-- lang: python -->
@blocksize: 数据块的大小
<!-- lang: python -->
@totalsize: 远程文件的大小
<!-- lang: python -->
"""
<!-- lang: python -->
percent = 100.0*blocknum*blocksize/totalsize
<!-- lang: python -->

<!-- lang: python -->
if percent > 100:
<!-- lang: python -->
percent = 100
<!-- lang: python -->
print("%.2f%%"% percent)
<!-- lang: python -->

<!-- lang: python -->
x = 0
<!-- lang: python -->
for url in imglist:
<!-- lang: python -->
local = '{}.jpg'.format(x)
<!-- lang: python -->
urllib.urlretrieve(url,local,cbf)
<!-- lang: python -->
x+=1
<!-- lang: python -->
print(url)
<!-- lang: python -->

<!-- lang: python -->
html = getHtml('http://www.zhihu.com/')
<!-- lang: python -->
imglist = getImg(html)
<!-- lang: python -->
print(dwlImg(imglist))


3.urllib.urlcleanup() 清理urllib.rulretrieve造成的缓存

4.urllib.quote(url)和urllib.quote_plus(url) 将url数据获取之后,并将其编码,从而适用与URL字符串中,使其能被打印和被web服务器接受。

>>> urllib.quote('http://www.zhihu.com')
'http%3A//www.zhihu.com'

>>> urllib.quote_plus('http://www.zhihu.com')
'http%3A%2F%2Fwww.zhihu.com'


5.urllib.unquote(url)和urllib.unquote_plus(url) 作用与4相反

6.urllib.urlencode(query) 将url中的键值对以连接符&划分#这个不太懂,待之后研究了再补充,有了解的朋也欢迎讨论。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python python学习 urllib