python核心编程学习笔记-2016-09-10-02-Web编程(二)

        20.2.1 统一资源定位符

        URL(Uniform Resource Locator,统一资源定位符),它是一个Web地址,用来定位一个文档,或者调用CGI程序来为客户端产生一个文档。

        URI(Uniform Resource Identifier,统一资源标识)

        URN(Uniform Resource Name,统一资源名称)

        URL格式:

        prot_sch://net_loc/path;param?query#frag

pro_sch网络协议或者下载规划
net_loc服务器位置
path文件或CGI应用程序路径
param可选参数
query连接符(&)连接键值对
frag拆分文档中的特殊锚
         net_loc可进一步拆分:

         user:passwd@host:port

         user和passwd只会在使用FTP连接时用到。


         20.2.2 urlparse模块

         1. urlparse.urlparse()

         将URL字符串拆分成前述的六个部分,以一个元组的形式返回这六个部分。

         urlparse(urlstr, defProtSch=None, allowFrag=None)

         例如

>>> urlparse.urlparse('http://www.python.org/doc/FAQ.html')
('http', 'www.python.org', '/doc/FAQ.html', '', '', '')
          2. urlparse.urlunparse()

          与urlparse.urlparse()正好相反,把含url六个部分的元组重新组合成url字符串。

          urlunparse(urltup)

          3. urlparse.urljoin()

          取得baseurl(基路径,即net_loc附加一个完整的路径,但不包括终端文件),并与newurl连接起来,用于生成多个相关的url字符串。

          urljoin(baseurl, newurl, allowFrag=None)


          20.2.3 urllib模块

          1. urllib.urlopen()

           打开一个给定url字符串与Web连接,并返回文件类对象。

          urlopen(urlstr, postQueryData=None)

          若无给定协议或下载规划,或文件规划早已传入,则会打开一个本地文件。

          f = urllib.urlopen()对象的方法有f.read(),f.readlines(),f.readline(),f.close(),f.fileno(),f.geturl()和f.info()等。

          其中f.info()返回MIME(Mutipurpose Internet Mail Extension,多目标因特网邮件扩展)头文件。这个头文件可以通知浏览器返回的文件类型可以用哪些应用程序打开。f.geturl()获取真实的ur,这个url考虑了所有可能发生的间接导向。

          2. urllib.urlretrieve()

          除从url中读取文件内容,还可以将整个html文件下载到本地硬盘中。

          urlretrieve(urlstr, localfile=None, downloadStatusHook=None)

          给定localfile(本地文件路径?),就可以下载html。downloadStatusHook可以用来表示下载状态。

          urlretrieve()返回一个2元组,(filename, mime_hdrs),filename是包含下载数据的本地文件名,mime_hdrs是针对Web服务器响应后返回的一系列MIME文件头(?)。

          3. urlquote()和urlquote_plus()

           对url字符串进行编码。

          在对url字符串的编码中,逗号、下划线、句号、斜线和字母数字这类符号不需要转换,其他均需要转换,加%,同时转换成其十六进制的ASCII值。

>>> final = 'http://www/~foo/cgi_bin/s.py?name=joe mama&num=6'
>>> urllib.urlquote(final)
'http%3a//www/%7efoo/cgi_bin/s.py%3fname%3djoe%20mama%26num%3d6'
           urlquote()和urlquote_plus()的不同之处在于后者将空格编码成'+'。

           4. urllib.unquote()和urllib.unquote_plus()

           解码。

           5. urllib.urlencode()

           将字典键值对编译成有效的CGI请求字符串(?)。

           6. 安全套接字层支持

           安全套接字层(Secure Socket Layer, SSL).


           20.2.4 urllib2模块

           处理更复杂的url打开问题。

#-*-coding: utf-8-*-

import urllib2

LOGIN = 'wesc'
PASSWD = "you'llNeverGuess"
URL = 'http://localhost'

# 基础认证处理器方法,理解就是url并未改变,只是安装了某个东西,可以打开所有URL
def handler_version(url):
    from urlparse import urlparse as up
    hdlr = urllib2.HTTPBasicAuthHandler() # 基本处理器类实例化
    hdlr.add_password('Archives', up(url)[1], LOGIN, PASSWD) # 添加认证信息
    opener = urllib2.build_opener(hdlr) # 建立一个URL-opener
    urllib2.install_opener(opener) # 安装
    return url

# 认证头方法,在url字符串中加入认证头,实际等同于改变url字符串
def request_version(url):
    from base64 import encodestring
    req = urllib2.Request(url) # request对象
    b64str = encodestring('%s:%s' % (LOGIN, PASSWD))[:-1]
    req.add_header("Authorization", "Basic %s" % b64str) # 添加base64编码认证头信息
    return req

for funcType in ('handler', 'request'):
    print "*** Using %s:" % funcType.upper()
    url = eval('%s_version' % funcType)(URL)
    f = urllib2.urlopen(url)
    print f.readline()
    f.close()
             实际运行会报错,暂时存疑。

            本章学到这里,总体感觉比较抽象,不理解的地方很多,可能与缺乏计算机网络相关知识有关,以后补足了这部分知识后,再回来看这部分内容,也许就没什么问题了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值