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 相关文章推荐
python字符串加密解密的三种方法分享(base64 win32com)
Jan 19 Python
简单上手Python中装饰器的使用
Jul 12 Python
pycharm下查看python的变量类型和变量内容的方法
Jun 26 Python
Python解决走迷宫问题算法示例
Jul 27 Python
python中的不可变数据类型与可变数据类型详解
Sep 16 Python
python 循环读取txt文档 并转换成csv的方法
Oct 26 Python
Python实现定时自动关闭的tkinter窗口方法
Feb 16 Python
python解释器pycharm安装及环境变量配置教程图文详解
Feb 26 Python
Python super()方法原理详解
Mar 31 Python
opencv 实现特定颜色线条提取与定位操作
Jun 02 Python
详解用selenium来下载小姐姐图片并保存
Jan 26 Python
python lambda 表达式形式分析
Apr 03 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
mysql数据库差异比较的PHP代码
2012/02/05 PHP
ThinkPHP3.2.1图片验证码实现方法
2016/08/19 PHP
Jquery优化效率 提升性能解决方案
2010/09/06 Javascript
JS控制阿拉伯数字转为中文大写示例代码
2013/09/04 Javascript
Jquery validation remote 验证的缓存问题解决方法
2014/03/25 Javascript
jquery attr方法获取input的checked属性问题
2014/05/26 Javascript
node.js中的fs.fchmodSync方法使用说明
2014/12/16 Javascript
jQuery mobile转换url地址及获取url中目录部分的方法
2015/12/04 Javascript
jquery ajax分页插件的简单实现
2016/01/27 Javascript
如何清除IE10+ input X 文本框的叉叉和密码输入框的眼睛图标
2016/12/21 Javascript
Jquery-data的三种用法
2017/04/18 jQuery
jQuery简单实现向列表动态添加新元素的方法示例
2017/12/25 jQuery
如何快速解决JS或Jquery ajax异步跨域的问题
2018/01/08 jQuery
JavaScript获取用户所在城市及地理位置
2018/04/21 Javascript
javascript深拷贝、浅拷贝和循环引用深入理解
2018/05/27 Javascript
vue中子组件的methods中获取到props中的值方法
2018/08/27 Javascript
Layui选项卡制作历史浏览记录的方法
2019/09/28 Javascript
解决Vue watch里调用方法的坑
2020/11/07 Javascript
[42:23]完美世界DOTA2联赛PWL S3 Forest vs Rebirth 第二场 12.10
2020/12/13 DOTA
用Python生成器实现微线程编程的教程
2015/04/13 Python
Python对象转JSON字符串的方法
2016/04/27 Python
Python使用pymysql从MySQL数据库中读出数据的方法
2018/07/25 Python
如何安装多版本python python2和python3共存以及pip共存
2018/09/18 Python
pandas.cut具体使用总结
2019/06/24 Python
详解基于Jupyter notebooks采用sklearn库实现多元回归方程编程
2020/03/25 Python
CSS3.0实现霓虹灯按钮动画特效的示例代码
2021/01/12 HTML / CSS
介绍一下.net和Java的特点和区别
2012/09/26 面试题
JAVA招聘远程笔试题
2015/07/23 面试题
小学生防溺水广播稿
2014/01/12 职场文书
服务之星事迹材料
2014/05/03 职场文书
会计演讲稿范文
2014/05/23 职场文书
小学生关于梦想的演讲稿
2014/08/22 职场文书
2015年元旦主持词开场白
2014/12/14 职场文书
2015年健康教育工作总结
2015/04/10 职场文书
2016年第十九届推普周活动总结
2016/04/06 职场文书
vue完美实现el-table列宽自适应
2021/05/08 Vue.js