python实现切割url得到域名、协议、主机名等各个字段的例子


Posted in Python onJuly 25, 2019

有一个需求就是需要对url进行进一步的划分得到详细的各个字段信息,下面是简单的实现:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
'''
__Author__:沂水寒城
功能: 对URL进行分割,基于urlparse, publicsuffix, urllib编写
'''
from urlparse import urlparse
import codecs
from publicsuffix import PublicSuffixList
from urllib import splitport
import re
 
 
def domain_split(server_domain):
  '''
  server_domain为网站所用服务名+域名
  分割域名, 得到前缀(服务名)、主机域名、后缀(顶级域名)
    输入www.baidu.com,输出'www', 'baidu', 'com'
    输入172.31.137.240,输出'', '172.31.137.240', ''
  '''
  PSL_FILE = codecs.open('public_suffix_list.dat', encoding='utf8')
  psl = PublicSuffixList(PSL_FILE)
  domain = psl.get_public_suffix(server_domain)
  # 取域名的第一个字段,即第一个'.'之前的为主机域名, 后面为顶级域名,前面为所使用的服务
  if '.' in domain:
    server = server_domain[:-len(domain)]
    host = domain[:domain.index('.')]
    top = domain[domain.index('.'):]
    hostname = server + host + top
  else: # 说明提取域名失败,例如172.31.137.240等IP形式,此时全部当作主机域名
    server = ''
    host = server_domain
    top = ''
    hostname = server_domain
  return server, host, top, hostname
 
 
def url_split_new(url):
  '''
  url分割
  '''
  if not url.startswith('http'): # 补全协议,否则urlparse出错
    url = 'http://' + url
  parts = urlparse(url)
  # 服务+域名'www.baidu.api.com.cn'切分
  server, host, top, hostname = domain_split(parts.netloc)
  host, port = splitport(host)
  if port == None: port = ''
  return {'protocol': parts.scheme, 'hostname': hostname, 'path': parts.path}
 
 
if __name__ == '__main__':
  print url_split_new('http://www.baidu.com/')
  print url_split('http://www.baidu.com/')

以上这篇python实现切割url得到域名、协议、主机名等各个字段的例子就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python3指定路径寻找符合匹配模式文件
May 22 Python
Python pickle模块用法实例分析
May 27 Python
Linux 发邮件磁盘空间监控(python)
Apr 23 Python
Python的collections模块中的OrderedDict有序字典
Jul 07 Python
Python+tkinter模拟“记住我”自动登录实例代码
Jan 16 Python
Windows下将Python文件打包成.EXE可执行文件的方法
Aug 03 Python
Python对象中__del__方法起作用的条件详解
Nov 01 Python
Django框架模板文件使用及模板文件加载顺序分析
May 23 Python
python 列表输出重复值以及对应的角标方法
Jun 11 Python
Numpy实现卷积神经网络(CNN)的示例
Oct 09 Python
django使用channels实现通信的示例
Oct 19 Python
Python使用protobuf序列化和反序列化的实现
May 19 Python
python按修改时间顺序排列文件的实例代码
Jul 25 #Python
在python中用url_for构造URL的方法
Jul 25 #Python
对python中url参数编码与解码的实例详解
Jul 25 #Python
使用WingPro 7 设置Python路径的方法
Jul 24 #Python
python selenium 查找隐藏元素 自动播放视频功能
Jul 24 #Python
简单了解Django应用app及分布式路由
Jul 24 #Python
django的ORM操作 删除和编辑实现详解
Jul 24 #Python
You might like
自己做矿石收音机
2021/03/02 无线电
PHP 面向对象程序设计(oop)学习笔记(三) - 单例模式和工厂模式
2014/06/12 PHP
ThinkPHP中URL路径访问与模块控制器之间的关系
2014/08/23 PHP
php网页版聊天软件实现代码
2016/08/12 PHP
Laravel 读取 config 下的数据方法
2019/10/13 PHP
PHP实现简单用户登录界面
2019/10/23 PHP
jquery选择器(常用选择器说明)
2010/09/28 Javascript
js去除重复字符串两种实现方法
2013/01/09 Javascript
jQuery父级以及同级元素查找介绍
2013/09/04 Javascript
js中的时间转换—毫秒转换成日期时间的示例代码
2014/01/26 Javascript
jQuery取得设置清空select选择的文本与值
2014/07/08 Javascript
JS网页在线获取鼠标坐标值的方法
2015/02/28 Javascript
使用Meteor配合Node.js编写实时聊天应用的范例
2015/06/23 Javascript
jQuery使用animate创建动画用法实例
2015/08/07 Javascript
iframe跨域通信封装详解
2015/08/11 Javascript
继续学习javascript闭包
2015/12/03 Javascript
所见即所得的富文本编辑器bootstrap-wysiwyg使用方法详解
2016/05/27 Javascript
一句jQuery代码实现返回顶部效果(简单实用)
2016/12/28 Javascript
JS简单实现获取元素的封装操作示例
2017/04/07 Javascript
vue使用axios跨域请求数据问题详解
2017/10/18 Javascript
小程序实现悬浮搜索框
2019/07/12 Javascript
JS插入排序简单理解与实现方法分析
2019/11/25 Javascript
[05:28]刀塔密之一:团结则存
2014/07/03 DOTA
基于Python中求和函数sum的用法详解
2018/06/28 Python
Python人工智能之路 jieba gensim 最好别分家之最简单的相似度实现
2019/08/13 Python
在macOS上搭建python环境的实现方法
2019/08/13 Python
HTML5 canvas标签实现刮刮卡效果
2015/04/24 HTML / CSS
斯洛伐克时尚服装网上商店:Cellbes
2016/10/20 全球购物
加拿大时尚床上用品零售商:QE Home | Quilts Etc
2018/01/22 全球购物
学校安全检查制度
2014/01/27 职场文书
集中整治工作方案
2014/05/01 职场文书
校园会短篇的广播稿
2014/10/21 职场文书
CSS中妙用 drop-shadow 实现线条光影效果
2021/11/11 HTML / CSS
pytorch分类模型绘制混淆矩阵以及可视化详解
2022/04/07 Python
Python内置类型集合set和frozenset的使用详解
2022/04/26 Python
从原生JavaScript到React深入理解
2022/07/23 Javascript