发布网友 发布时间:2022-04-27 08:59
共2个回答
懂视网 时间:2022-04-18 19:36
下面小编就为大家带来一篇基于python(urlparse)模板的使用方法总结。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧一、简介
urlparse模块用户将url解析为6个组件,并以元组形式返回,返回的6个部分,分别是:scheme(协议)、netloc(网络位置)、path(路径)、params(路径段参数)、query(查询)、fragment(片段)。
二、功能列举
1、urlparse.urlparse()(将url解析为组件,url必须以http://开头)
>>> urlparse.urlparse("https://i.cnblogs.com/EditPosts.aspx?opt=1") ParseResult(scheme='https', netloc='i.cnblogs.com', path='/EditPosts.aspx', params='', query='opt=1', fragment='')
返回的元素中也会包含其他属性,比如(username,password,hostname,port):
>>> urlparse.urlparse("https://i.cnblogs.com:80/EditPosts.aspx?opt=1").port 80
>>> urlparse.urlparse("https://i.cnblogs.com:80/EditPosts.aspx?opt=1").hostname 'i.cnblogs.com'
2、urlparse.urljoin()(将相对的地址组合成一个url,对于输入没有限制,开头必须是http://,否则将不组合前面)
>>> urlparse.urljoin("https://i.cnblogs.com","EditPosts.aspx") 'https://i.cnblogs.com/EditPosts.aspx'
3、urlparse.urlsplit() :返回一个5个元素的元组,适用于遵循RFC2396的URL
>>> urlparse.urlsplit("https://i.cnblogs.com:80/EditPosts.aspx?opt=1") SplitResult(scheme='https', netloc='i.cnblogs.com:80', path='/EditPosts.aspx', query='opt=1', fragment='')
4、urlparse.urlunsplit() :使用urlsplit的格式组合成一个url,传递的元素必须是5个,或者直接将分解的元组重新组合
>>> urlparse.urlunsplit(("https","i.cnblogs.com","EditPosts.aspx","a=a","b=b")) 'https://i.cnblogs.com/EditPosts.aspx?a=a#b=b'
>>> parse = urlparse.urlsplit("https://i.cnblogs.com:80/EditPosts.aspx?opt=1") >>> urlparse.urlunsplit(parse) 'https://i.cnblogs.com:80/EditPosts.aspx?opt=1'
5、urlparse.urlunparse() :使用urlparse的格式组合成一个url,可以直接将urlparse的返回传递组合
>>> parse = urlparse.urlparse("https://i.cnblogs.com:80/EditPosts.aspx?opt=1") >>> urlparse.urlunparse(parse) 'https://i.cnblogs.com:80/EditPosts.aspx?opt=1'
>>> urlparse.urlunparse(("https","i.cnblogs.com","/EditPosts.aspx","","opt=1","")) 'https://i.cnblogs.com/EditPosts.aspx?opt=1'
热心网友 时间:2022-04-18 16:44
最新版的python3.3.0已经发布了。相较于python3.0,3.2的改动并不大。但网上的大量的教程等大都以2.x版本为基础。这为想要从python3.0学起的菜鸟带来了不少的困难。 作为一只菜鸟,最近想学习一下python中urllib模块的使用方法。从网上找的最简单的实例:把google 首页的html抓取下来并显示在控制台上 代码:
[python] view plain copy
import urllib
print urllib.urlopen('http://www.google.com').read()
[python] view plain copy
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文档的实例:
[python] view plain copy
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) )
[html] view plain copy
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使用实例:
[python] view plain copy
import urlparse
URLscheme = "http"
URLlocation = "www.python.org"
URLpath = "lib/mole-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, \
"mole-%s.html" % (mod))
print "\t" + newURL
#通过为路径添加一个子路径来组成一个新的URL
print " 通过拼接子路径来生成Python文档页面的URL"
newURL = urlparse.urljoin(unparsedURL,
"mole-urllib2/request-objects.html")
print "\t" + newURL
[python] view plain copy
用Google搜索python时地址栏中URL的解析结果
('http', 'www.google.com', '/search', '',
'hl=en&q=python&btnG=Google+Search', '')
反解析python文档页面的URL
http://www.python.org/lib/mole-urlparse.html
利用拼接方式添加更多python文档页面的URL
http://www.python.org/lib/mole-urllib.html
http://www.python.org/lib/mole-urllib2.html
http://www.python.org/lib/mole-httplib.html
http://www.python.org/lib/mole-cgilib.html
通过拼接子路径来生成Python文档页面的URL