URI和URLURI(Universal Resource Identifier)是通用资源标志符
通常由三部分组成:
- 访问资源的命名机制存放资源的主机名资源自身的名称
http://www.baidu.com/img/bdlogo.png
可以解释为一个可以通过HTTP协议访问的资源位于主机www.baidu.com
上通过/img/bdlogo.png
访问URL
URL是URI的一个子集,是Uniform Resource Locator的缩写,译为统一资源定位符,简而言之URL是Internet上描述信息资源的字符串。URL的一般格式为(带方括号[]为可选项)protocol://hostname[:port]/path/[parameters][?query]#fragment
- 第一部分是协议第二部分为存有资源的主机IP也可能包括端口号第三部分是主机资源的具体地址,如目录和文件名等
区别
URI属于URL更低级层次的抽象,一种字符串文本标准URI表示请求服务器的路径定义一个资源,而URL同时说明要如何访问这个资源
抓取网页内容
import urllib2response = urllib2.urlopen('http://www.baidu.com')html = response.read()print html
使用请求
import urllib2req = urllib2.Request('http://www.baidu.com')response = urllib2.urlopen(req)the_page = respense.read()print the_page
Post请求
import urllibimport urllib2url = 'http://www.someserver.com/register.cgi'values = {'name':'WHY','location':'SDU','language','Python'}data = urllib.urlencode(values)req = urllib2.Request(url,data)response = urllib2.urlopen(req)the_page = response.read()
GET请求
import urllib2import urllibdata = {}data['name'] = 'WHY'data['location'] = 'SDU'data['language'] = 'Python'url_values = urllib.urlencode(data)print url_valuesname = Somebody + Here&language=Python&location=Northamptonurl = 'http://www.example.com/example.cgi'full_url = url + '?' + url_valuesdata = urllib2.open(full_url)
设置Headers
import urllibimport urllib2url = 'http://www.someserver.com/cgi-bn/register.cgi'user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5;Windows NT)'values = {'name':'WHY','location':'SDU','language':'Python'}headers = {'User-Agent':user_agent}data = urllib.urlencode(values)req = urllib2.Request(url,data,headers)response = urllib.urlopen(req)the_page = response.read()
异常URLError
通常,URLError在没用网络连接(没有路由到特定服务器)或者服务器不存在产生这种情况下,异常同样会带有reason
属性,他是一个tuple包含了一个错误号和一个错误信息
import urllib2req = urllib2.Request('http://www.baibai.com')try: urllib2.urlopen(req)except urllib2.URLError,e:print e.reason
HTTPError
服务器上每个HTTP应答对象response包含一个数字”状态码”有时状态码服务器无法完成请求,默认的处理器会为你处理一部分应答HTTP状态码分别以1~5开头由3位整数组成:
200:请求成功,处理方式:获得相应的内容,进行处理201:请求完成,结果是创建了新资源,心创建资源的URI可再响应的实体中得到202:请求被接受,处理尚未完成 处理方式:阻塞等待204:服务器已经实现了请求,但没有返回心的信息,如果客户是用户代理,则无须为此更新自身的文档视图,处理方式 丢弃300: 作为3XX类型回应的默认解释,存在多个可用的被请求资源。处理方式:若程序中能够处理,则进行进一步处理,如果程序不能处理,则丢弃301:请求到飞资源都会被分配一个永久的URL,这个就可以在将来通过URL来访问此资源,处理方式:重定向到分配的URL302:请求到的资源在一个不同的URL处临时保存,处理方式:重新向到临时的URL400:非法请求 处理方式 丢弃401:未授权 处理方式 丢弃403:禁止 处理方式 丢弃404:没有找到 处理方式 丢弃5XX:服务器错误,处理方式 丢弃HTTPError产生后会有一个整形code
属性,是服务器发送的行管错误BaseHTTPServer.BaseHTTPRequestHandler.reponse是一个很有用的应答号码字典,显示HTTP协议使用所有的应答号
import urllib2req = urllib2.Request('http://bbs.csdn.net/callmewhy')try:urllb2.urlopen(req)except urllib2.URLError, e:print e.code