python模块--urllib

来源:互联网 发布:简易购物网站源码 编辑:程序博客网 时间:2024/05/17 22:43

首先用python的爬虫可以做很多的事情,今天主要做一下利用urllib这个包中的方法从网上下载一些东西
一、python下载网络资源
python中下载需要用到的是urllib这个模块,先介绍一下这个模块的一些方法:

urllib.urlopen(url[, data[, proxies]])
url就是下载网站的url地址;
data代表的是我们请求这个网站的时候要传递的参数,可以是GET或者是POST方式的数据;比如我们要进入某一个页面,但是这个页面需要我们传递参数才可以进入那我们就可以用GET方式:

data = urllib.urlencode({"contains":"buddy"})u = urllib.urlopen("http://localhost/users/all/?%s" % data)
或者我们可以使用POST方式:

data = urllib.urlencode({"name":"buddy lindsey","height":"5 foot 5 inches"})u = urllib.urlopen("http://localhost/users/create", data)
这样我们的参数就可以传递过去了,不过一般情况下是不需要的。
proxies代表是是否使用代理的方式,代理服务器是介于浏览器和Web服务器之间的一台服务器,通过使用代理的形式,浏览器不是直接到Web服务器去取回网页而是向代理服务器发出请求,请求信号会先送到代理服务器,由代理服务器来取回浏览器所需要的信息并传送给你的浏览器。这种情况很多,比如我们有的时候要通过代理的方式使用谷歌。代理的格式是一个字典值的形式,使用代理:

# Use http://www.someproxy.com:3128 for http proxyingproxies = {'http': 'http://www.someproxy.com:3128'}filehandle = urllib.urlopen(some_url, proxies=proxies)# Don't use any proxiesfilehandle = urllib.urlopen(some_url, proxies={})# Use proxies from environment - both versions are equivalentfilehandle = urllib.urlopen(some_url, proxies=None)filehandle = urllib.urlopen(some_url)
这个方法中后两个参数是可选的,一般情况下我们只要指定url就可以了,data默认就是None,proxies在默认的情况下也是None。

urllib.urlretrieve(url[, filename[, reporthook[, data]]])
urlretrieve方法直接将远程数据下载到本地。参数filename指定了保存到本地的路径;参数reporthook是一个回调函数,当连接上服务器、以及相应的数据块传输完毕的时候会触发该回调,该回调函数有三个参数。参数data指post到服务器的数据。该方法返回一个包含两个元素的元组(filename, headers),filename表示保存到本地的路径,header表示服务器的响应头。下面是一个完整的使用urllib的例子,从网站上下载html的内容保存到本地文件

# -*- coding:utf-8 -*-import urllibdef hook(a, b, c):    '''回调函数    @a: 已经下载的数据块    @b: 数据块的大小    @c: 远程文件的大小    '''    per = 100.0 * a * b / c    if per > 100:        per = 100    print '%.2f%%' % perurl = 'http://www.csdn.net'local = 'd://csdn.html'urllib.urlretrieve(url, local, hook)

参考:
http://www.stamhe.com/?p=1091
http://buddylindsey.com/basic-urllib-get-and-post-with-and-without-data/
http://tool.oschina.net/apidocs/apidoc?api=python2.7.3

0 0