python之web模块学习-- urlparse

继续学习python的web模块,urlparse 是一个比较简单的模块,主要是用来 解析URL字符串的

1  urlparse简介

python使用urlparse来解析URL字符串

主要方法: urlprase

次要方法: urljoin urlsplit  urlunsplit等

2  urlparse详解

urlparse模块主要是把url拆分为6部分,并返回元组。并且可以把拆分后的部分再组成一个url。主要有函数有urljoin、urlsplit、urlunsplit、urlparse等。

URL格式包含:

协议://用户名@密码:子域名.域名.顶级域名:端口/目录/文件名.文件后缀?参数=值#标志

2.1 urlparse

urlparse.urlparse(urlstring[,scheme[, allow_fragments]])
    可选参数:  
    scheme – 主要是用来 为不包含些一部分的URL指定默认协议,此参数的默认值为空字符串
    allow_fragments 用来指示是否可以对地址进行分片,此参数的默认值为 True

将urlstring解析成6个部分,它从urlstring中取得URL,并返回元组 (scheme, netloc, path, parameters,query, fragment),但是实际上是基于namedtuple,是tuple的子类。它支持通过名字属性或者索引访问的部分URL,每个组件是一串字符,也有可能是空的。组件不能被解析为更小的部分,%后面的也不会被解析,分割符号并不是解析结果的一部分,除非用斜线转义,注意,返回的这个元组非常有用,例如可以用来确定网络协议(HTTP、FTP等等 )、服务器地址、文件路径,等等。

urlparse方法返回对象中的属性:

属性 索引值 值含义 默认值 备注
scheme 0 协议 空字符串
netloc 1 服务器地址 空字符串
path 2 路径 空字符串
parameters 3 参数 空字符串
query 4 查询部分 空字符串
fragment 5 分片部分 空字符串
username 用户名 None
password 密码 None
hostname 主机名 None
port 端口 None

附代码:

>>> import urlparse
>>> url=urlparse.urlparse(‘http://www.baidu.com/index.php?username=51cto‘)
>>> url
ParseResult(scheme=‘http‘,netloc=‘www.baidu.com‘, path=‘/index.php‘, params=‘‘, query=‘username=51cto ‘, fragment=‘‘)
>>> url.scheme
‘http‘
>>> url.netloc
‘www.baidu.com‘
>>> url.path
‘/index.php‘
>>> url.params
‘‘
>>> url.query
‘username=51cto‘
>>> url.fragment
‘‘
>>> url.geturl()
‘http://www.baidu.com/index.php?username=51cto‘
>>> url
ParseResult(scheme=‘http‘, netloc=‘‘, path=‘www.baidu.com/index.php‘,params=‘‘, query=‘username=51cto ‘, fragment=‘‘)
#备注:当URL 中不存在 http的时候,会自动使用此参数

2.2 urljoin

urlparse.urljoin(base,url[, allow_fragments])

urljoin主要是拼接URL,它以base作为其基地址,然后与url中的相对地址相结合组成一个绝对URL地址。函数urljoin在通过为URL基地址附加新的文件名的方式来处理同一位置处的若干文件的时候格外有用。需要注意的是,如果基地址并非以字符/结尾的话,那么URL基地址最右边部分就会被这个相对路径所替换。如果希望在该路径中保留末端目录,应确保URL基地址以字符/结尾。

附代码:

>>>url=urlparse.urljoin(‘http://www.baidu.com‘,‘index.html‘)
>>> url
‘http://www.baidu.com/index.html‘

由于对输入的参数没有限制,所以需要注意:

2.2.1 当输入的参数都是空字符串的时候,返回的拼合url也是空字符串

附代码:

>>> url = urlparse.urljoin(‘‘,‘‘)
>>> url
‘‘

2.2.2 在相对url中如果有协议字段,则优先使用相对url中的协议,否则使用绝对url中的协议字段

附代码:

>>> url = urlparse.urljoin(‘http://www.baidu.com‘,‘ftp://www.baidu.com/index.html‘)
>>> url
‘ftp://www.baidu.com/index.html‘
>>> url = urlparse.urljoin(‘http://www.baidu.com‘,‘www.baidu.com/index.html‘)
>>> url
‘http://www.baidu.com/www.baidu.com/index.html‘

当相对字符串中不包含协议的时候,就会将所有的字符串认为是一个路径信息,从而忙字符串的值和绝对url的值结合了起来

2.2.3 当绝对url和相对url中都含有服务器地址且不相同的时候,将采用相对url地址的服务器地址和路径

附代码:

>>> url = urlparse.urljoin(‘http://www.baidu.com‘,‘http://www.baidu.com/index.html‘)
>>> url
‘http://www.baidu.com/index.html‘

2.3  urlsplit

urlparse.urlsplit(urlstring[,scheme[, allow_fragments]])

主要是分析urlstring,返回一个包含5个字符串项目的元组:协议、位置、路径、查询、片段。allow_fragments为False时,该元组的组后一个项目总是空,不管urlstring有没有片段,省略项目的也是空。urlsplit()和urlparse()差不多。不过它不切分URL的参数。适用于遵循RFC2396的URL,每个路径段都支持参数。这样返回的元组就只有5个元素。

附代码:

>>> url = urlparse.urlsplit(‘http://www.baidu.com:80/index.html?src=fie‘)
>>> url
SplitResult(scheme=‘http‘,netloc=‘www.baidu.com:80‘, path=‘/index.html‘, query=‘src=fie‘, fragment=‘‘)
>>> url = urlparse.urlparse(‘http://www.baidu.com:80/index.html?src=fie‘)
 
>>> url
ParseResult(scheme=‘http‘,netloc=‘www.baidu.com:80‘, path=‘/index.html‘, params=‘‘, query=‘src=fie‘,fragment=‘‘)

2.4 urlunsplit

urlparse.urlunsplit(parts)

urlunsplit使用urlsplit()返回的值组合成一个url

附代码:

>>> url = urlparse.urlsplit(‘http://www.baidu.com:80/index.html?src=fie‘)
>>> url
SplitResult(scheme=‘http‘,netloc=‘www.baidu.com:80‘, path=‘/index.html‘, query=‘src=fie‘, fragment=‘‘)
>>> url=urlparse.urlunsplit((‘http‘,‘www.baidu.com:80‘,‘/index.html‘,‘src=fie‘,‘‘))
>>> url
‘http://www.baidu.com:80/index.html?src=fie‘

2.4 urlunparse

urlparse.urlunparse(parts)

从一个元组构建一个url,元组类似urlparse返回的,它接收元组(scheme, netloc, path, parameters, query, fragment)后,会重新组成一个具有正确格式的URL,以便供Python的其他HTML解析模块使用。

>>> url =urlparse.urlparse(‘http://www.baidu.com:80/index.html?src=fie‘)
>>> url
ParseResult(scheme=‘http‘, netloc=‘www.baidu.com:80‘,path=‘/index.html‘, params=‘‘, query=‘src=fie‘, fragment=‘‘)
>>> url = urlparse.urlunparse(url)
>>> url
‘http://www.baidu.com:80/index.html?src=fie‘

未完,待续。。。

时间: 2024-11-08 20:14:06

python之web模块学习-- urlparse的相关文章

python之web模块学习-- urllib

准备写一些列的 python之web模块学习,基本上涉及常用的的web模块,包括 urllib.urllib2.httplib.urlparse.requests,现在,开始我们的第一个模块的学习吧. 1  urllib简介 python urllib 模块提供了一个从指定的URL地址获取网页数据,然后对其进行分析处理,获取我们想要的数据. 2  常用方法 2.1  urlopen  -- 创建一个类文件对象 为读取指定的URL help(urllib.urlopen) urlopen(url,

python之web模块学习-- urllib2

下面继续学习python的web模块 ---  urllib2,一个源于urllib又高于urllib的模块. 1  urllib2 简介 urllib2是python自带的一个访问网页及本地文件的库. 与urllib相比,显著区别之处在于: 1) urllib2可以接受一个Request类的实例来设置URL请求的headers,urllib仅可以接受URL.这意味着,用urllib时不可以伪装User Agent字符串等. 2) urllib提供urlencode方法用来encode发送的da

python之web模块学习-- httplib

1  httplib简介 httplib 是python中http协议的客户端实现,可以使用该模块来与 HTTP 服务器进行交互 httplib是一个相对底层的http请求模块,其上有专门的包装模块,如urllib内建模块,goto等第三方模块,但是封装的越高就越不灵活,比如urllib模块里请求错误时就不会返回结果页的内容,只有头信息,对于某些需要检测错误请求返回值的场景就不适用,所以就得用这个模块了. httplib实现了HTTP和HTTPS的客户端协议,一般不直接使用,在python更高层

Python随机数random模块学习,并实现生成6位验证码

一.前言 学习python随机数random模块的使用 ,并使用模块中的函数,实现6位验证码生成 二.random模块 1.random.random() 返回0-1直接的随机数,类型为float >>>print(random.random()) 0.1259184691662908 2.random.randint(1, 8) 返回1-8直接的随机数,包括8 >>>print(random.randint(1, 8)) 3 3.random.choice() 从一个

[ python编程 ] subprocess模块学习总结

转载:http://www.jb51.net/article/48086.htm 从Python 2.4开始,Python引入subprocess模块来管理子进程,以取代一些旧模块的方法:如 os.system.os.spawn*.os.popen*.popen2.*.commands.*不但可以调用外部的命令作为子进程,而且可以连接到子进程的input/output/error管道,获取相关的返回信息. 一.subprocess以及常用的封装函数    运行python的时候,我们都是在创建并

Python的hashlib模块学习

python的hashlib模块提供一些常用的加密功能 例如获取字符串'Nobody inspects the spammish repetition'的MD5校验值 In [48]: import hashlib In [49]: m=hashlib.md5() In [50]: m.update('Nobody inspects') In [51]: m.update('the spammish repetition') In [52]: m.digest() Out[52]: '%\x8d

python简易web服务器学习笔记(二)

import BaseHTTPServer #------------------------------------------------------------------------------- class RequestHandler(BaseHTTPServer.BaseHTTPRequestHandler): '''Respond to HTTP requests with info about the request.''' # Template for page to sen

Python re正则表达式模块学习【转】

感谢原作者,本文转自:http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html 博主还有一些比较好的python文档在此一并推荐,可以移步查看. 文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例.本文的内容不包括如何编写高效的正则表达式.如何优化正则表达式,这些主题请查看其他教程. 注意:本文基于Python2.4完成:如果看到不明白的词汇请记得百度谷歌或维基,whate

Python之Tkinter模块学习

本文转载自:http://www.cnblogs.com/kaituorensheng/p/3287652.html Tkinter模块("Tk 接口")是Python的标准Tk GUI工具包的接口 作为实践, 用Tkinter做了个ascii码转化查询表,本文从四点介绍 产品介绍 设计规划 相关知识 源码附件 1. 产品介绍 界面 功能 通过输入字符或数字查询对应的信息 通过选择列表中的信息查询对应的信息 2. 设计规划 规划图 3. 相关知识 首先看怎么产生第一个窗口 from T