python模块学习---urllib,urlparse(3.0以后有改动)

最新版的python3.3.0已经发布了。相较于python3.0,3.2的改动并不大。但网上的大量的教程等大都以2.x版本为基础。这为想要从python3.0学起的菜鸟带来了不少的困难。 作为一只菜鸟,最近想学习一下python中urllib模块的使用方法。从网上找的最简单的实例:把google 首页的html抓取下来并显示在控制台上 代码:

import    urllib
print    urllib.urlopen('http://www.google.com').read()

首先,使用过python3.0的朋友都知道,print已经变成含树了,需要括号。但这不是主要问题。问题是控制台显示错误,说urllib模块中没有urlopen方法。 奇怪了,网上的教程能错了?又尝试help(urllib),发现什么方法都没有,只提供了package contents,里面有5个名字。 

import urllib
help(urllib)

3.0版本中已经将urllib2、urlparse、和robotparser并入了urllib中,并且修改urllib模块,其中包含5个子模块,即是help()中看到的那五个名字。

为了今后使用方便,在此将每个包中包含的方法列举如下:

urllib.error: ContentTooShortError; HTTPError; URLError

urllib.parse: parseqs; parseqsl; quote; quotefrombytes; quote_plus; unquote unquoteplus; unquoteto_bytes; urldefrag; urlencode; urljoin; urlparse; urlsplit; urlunparse; urlunsplit

urllib.request: AbstractBasicAuthHandler; AbstractDigestAuthHandler; BaseHandler; CatheFTPHandler; FTPHandler; FancyURLopener; FileHandler; HTTPBasicAuthHandler; HTTPCookieProcessor; HTTPDefaultErrorHandler; HTTPDigestAuthHandler; HTTPErrorProcessorl; HTTPHandler; HTTPPasswordMgr; HTTPPasswordMgrWithDefaultRealm; HTTPRedirectHandler; HTTPSHandler;OpenerDirector;ProxyBasicAuthHandler ProxyDigestAuthHandler; ProxyHandler; Request; URLopener; UnknowHandler; buildopener; getproxies; installopener; pathname2url; url2pathname; urlcleanup; urlopen; urlretrieve;

urllib.response: addbase; addclosehook; addinfo; addinfourl;

urllib.robotparser: RobotFileParser

---------------------------------------------------------------------------------------------------------

在2.X版本下,打开HTML文档的实例:

import urllib  
  
  webURL = "http://www.python.org"  
  
  localURL = "index.html"  
  
  #通过URL打开远程页面  
  
  u = urllib.urlopen(webURL)  
  
  buffer = u.read()  
  
  print u.info()  
  
  print "从%s读取了%d 字节数据. " % (u.geturl(),len(buffer) )  
  
  #通过URL打开本地页面  
  
  u = urllib.urlopen(localURL)  
  
  buffer = u.read()  
  
  print u.info()  
  
  print "从%s读取了%d 字节数据. " % (u.geturl(),len(buffer) )  

运行结果如下:

Date: Fri, 26 Jun 2009 10:22:11 GMT  
  
 Server: Apache/2.2.9 (Debian) DAV/2 SVN/1.5.1 mod_ssl/2.2.9 OpenSSL/0.9.8g mod_wsgi/2.3 Python/2.5.2  
  
 Last-Modified: Thu, 25 Jun 2009 09:44:54 GMT  
  
 ETag: "105800d-46e7-46d29136f7180"  
  
 Accept-Ranges: bytes  
  
 Content-Length: 18151  
  
 Connection: close  
  
 Content-Type: text/html  
  
 从http://www.python.org读取了18151 字节数据.  
  
 Content-Type: text/html  
  
 Content-Length: 865  
  
 Last-modified: Fri, 26 Jun 2009 10:16:10 GMT 

  从index.html读取了865 字节数据.


若要通过urllib模块中的urlopen(url [,data])函数打开一个HTML文档,必须提供该文档的URL地址,包括文件名。函数urlopen不仅可以打开位于远程web服务器上的文件,而 且可以打开一个本地文件,并返回一个类似文件的对象,我们可以通过该对象从HTML文档中读出数据。

  一旦打开了HTML文档,我们就可以像使用常规文件一样使用read([nbytes])、readline()和readlines()函数来对文件进行读操作。若要读取整个HTML文档的内容的话,您可以使用read()函数,该函数将文件内容作为字符串返回。

  打开一个地址之后,您可以使用geturl()函数取得被获取网页的真正的URL。这是很有用的,因为urlopen(或使用的opener对象)也许会伴随一个重定向。获取的网页URL也许和要求的网页URL不一样。

  另一个常用的函数是位于从urlopen返回的类文件对象中的info()函数,这个函数可以返回URL位置有关的元数据,比如内容长度、内容类型,等等。下面通过一个较为详细的例子来对这些函数进行说明。


--------------------------------------------------------------------------------------------------------------------------

在2.X版本下,urlparse使用实例:

import urlparse  
  
  URLscheme = "http"  
  
  URLlocation = "www.python.org"  
  
  URLpath = "lib/module-urlparse.html"  
  
  modList = ("urllib", "urllib2", \  
  
  "httplib", "cgilib")  
  
  #将地址解析成组件  
  
  print "用Google搜索python时地址栏中URL的解析结果"  
  
  parsedTuple = urlparse.urlparse(  
  
  "http://www.google.com/search?  
  
  hl=en&q=python&btnG=Google+Search")  
  
  print parsedTuple  
  
  #将组件反解析成URL  
  
  print "\反解析python文档页面的URL"  
  
  unparsedURL = urlparse.urlunparse( \  
  
  (URLscheme, URLlocation, URLpath, '', '', ''))  
  
  print "\t" + unparsedURL  
  
  #将路径和新文件组成一个新的URL  
  
  print " 利用拼接方式添加更多python文档页面的URL"  
  
  for mod in modList:  
  
  newURL = urlparse.urljoin(unparsedURL, \  
  
  "module-%s.html" % (mod))  
  
  print "\t" + newURL  
  
  #通过为路径添加一个子路径来组成一个新的URL  
  
  print " 通过拼接子路径来生成Python文档页面的URL"  
  
  newURL = urlparse.urljoin(unparsedURL,  
  
  "module-urllib2/request-objects.html")  
  
  print "\t" + newURL  

运行结果如下:

用Google搜索python时地址栏中URL的解析结果

('http', 'www.google.com', '/search', '',  
  
 'hl=en&q=python&btnG=Google+Search', '')  
  
 反解析python文档页面的URL  
  
 http://www.python.org/lib/module-urlparse.html  
  
 利用拼接方式添加更多python文档页面的URL  
  
 http://www.python.org/lib/module-urllib.html  
  
 http://www.python.org/lib/module-urllib2.html  
  
 http://www.python.org/lib/module-httplib.html  
  
 http://www.python.org/lib/module-cgilib.html  
  
 通过拼接子路径来生成Python文档页面的URL  
  
 http://www.python.org/lib/module-urllib2/request-objects.html 

转自: http://blog.sina.com.cn/s/blog_5ff7f94f0100qr3c.html


你可能感兴趣的:(python)