以下是阅读python核心编程web 开发后的心得笔记
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打开问题。
-
-
- import urllib2
-
- LOGIN = 'wesc'
- PASSWD = "you'llNeverGuess"
- URL = 'http://localhost'
-
-
- 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)
- urllib2.install_opener(opener)
- return url
-
-
- def request_version(url):
- from base64 import encodestring
- req = urllib2.Request(url)
- b64str = encodestring('%s:%s' % (LOGIN, PASSWD))[:-1]
- req.add_header("Authorization", "Basic %s" % b64str)
- 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()
-
-
- 运行结果如下:
- *** Using HANDLER:
Traceback (most recent call last):
File "C:/Users/li/Desktop/python 源码/ch09/urlopen_auth.py", line 29, in
f = urllib2.urlopen(url)
File "C:\Python27\lib\urllib2.py", line 154, in urlopen
return opener.open(url, data, timeout)
File "C:\Python27\lib\urllib2.py", line 431, in open
response = self._open(req, data)
File "C:\Python27\lib\urllib2.py", line 449, in _open
'_open', req)
File "C:\Python27\lib\urllib2.py", line 409, in _call_chain
result = func(*args)
File "C:\Python27\lib\urllib2.py", line 1227, in http_open
return self.do_open(httplib.HTTPConnection, req)
File "C:\Python27\lib\urllib2.py", line 1197, in do_open
raise URLError(err)
urllib2.URLError:
Process finished with exit code 1
为什么会报错呢?错误还指向了urllib2的库?
总体感觉比较抽象,不理解的地方很多,可能与缺乏计算机网络编程相关知识有关,以后补足了这部分知识后,再回来看这部分内容,也许就没什么问题了。