设为首页 收藏本站
查看: 2446|回复: 0

[经验分享] python之web模块学习-- urlparse

[复制链接]

尚未签到

发表于 2018-8-5 12:29:59 | 显示全部楼层 |阅读模式
  继续学习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方法返回对象中的属性:
属性索引值值含义默认值备注scheme0协议空字符串netloc1服务器地址空字符串path2路径空字符串parameters3参数空字符串query4查询部分空字符串fragment5分片部分空字符串username用户名Nonepassword密码Nonehostname主机名Noneport端口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'
  未完,待续。。。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-547002-1-1.html 上篇帖子: Python使用socket实现简单的文件传输并校验 下篇帖子: python用for循环实现冒泡排序
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表