第一种方法:(其中url,可用ftp、file等协议)
>>> import urllib2
>>> response = urllib2.urlopen('http://python.org/')
>>> print response.read(),response.geturl(),response.getcode()
第二种方法:
>>> import urllib2
>>> req=urllib2.Request("http://python.org")
>>> response=urllib2.urlopen(req)
>>> print response.read(),response.geturl(),response.getcode()
如果想在post数据的话则,请求头的话,格式为字典
import urllib
data={} #data为字典,此处略去
data = urllib.urlencode(values)
headers = { 'User-Agent' : user_agent }
req = urllib2.Request(url, data,headers)
response=urllib2.urlopen(req)
异常处理:
不能处理一个respons时,urlopen抛出一个urlerror。HTTPerror是HTTP URL在特别的情况下被抛出的URLError的一个子类。
urlerror:
通常,urlerror被抛出是因为没有网络连接(没有至特定服务器的连接)或者特定的服务器不存在。在这种情况下,含有reason属性的异常将被抛出,以一种包含错误代码和文本错误信息的tuple形式。
from urllib2 import Request, urlopen, URLError
req = Request(someurl)
try:
response = urlopen(req)
except URLError, e:
if hasattr(e, 'reason'):
print 'We failed to reach a server.'
print 'Reason: ', e.reason
elif hasattr(e, 'code'):
print 'The server couldn\'t fulfill the request.'
print 'Error code: ', e.code
else:
pass
或者:
from urllib2 import Request, urlopen, URLError, HTTPError
req = Request(someurl)
try:
response = urlopen(req)
except HTTPError, e:
print 'The server couldn\'t fulfill the request.'
print 'Error code: ', e.code
except URLError, e:
print 'We failed to reach a server.'
print 'Reason: ', e.reason
其他一些方法介绍:
geturl()–它返回被获取网页的真正的url。这是很有用的,因为urlopen(或使用的opener对象)也许会伴随一个重定向。
获取的网页url也许和要求的网页url不一样。
info()–它返回一个像字典的对象来描述获取的网页,尤其是服务器发送的头。它现在一般是httplib.HTTPMessage的一个实例。
典型的头包含'Content-length', 'Content-type', 等等。看一下Quick Reference to HTTP Headers中,HTTP头列表,还有
关于他们简单的解释和使用方法。
import urllib2
req=urllib2.Request("http://python.org")
response = urllib2.urlopen(req)
print "response.geturl() ",response.geturl()
print "response.info():\n",response.info()
执行结果:
response.geturl() http://python.org response.info(): Date: Mon, 13 May 2013 13:11:23 GMT Server: Apache/2.2.16 (Debian) Last-Modified: Sun, 12 May 2013 03:41:45 GMT ETag: "105800d-52ab-4dc7d2dd81040" Accept-Ranges: bytes Content-Length: 21163 Vary: Accept-Encoding Connection: close Content-Type: text/html