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实现的二维码生成小软件
Jul 11 Python
python3编码问题汇总
Sep 06 Python
Python3.6正式版新特性预览
Dec 15 Python
Python 装饰器使用详解
Jul 29 Python
详谈python在windows中的文件路径问题
Apr 28 Python
Python基于pyCUDA实现GPU加速并行计算功能入门教程
Jun 19 Python
python 返回列表中某个值的索引方法
Nov 07 Python
用Python实现将一张图片分成9宫格的示例
Jul 05 Python
详解使用python绘制混淆矩阵(confusion_matrix)
Jul 14 Python
Python 函数list&read&seek详解
Aug 28 Python
Python 类,property属性(简化属性的操作),@property,property()用法示例
Oct 12 Python
Python实战之疫苗研发情况可视化
May 18 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
yii2实现 "上一篇,下一篇" 功能的代码实例
2017/02/04 PHP
PHP基于简单递归函数求一个数阶乘的方法示例
2017/04/26 PHP
Maps Javascript
2007/01/22 Javascript
一些不错的js函数ajax
2008/08/20 Javascript
JQuery 解析多维的Json数据格式
2009/11/02 Javascript
基于JQuery的浮动DIV显示提示信息并自动隐藏
2011/02/11 Javascript
jQuery-onload让第一次页面加载时图片是淡入方式显示
2012/05/23 Javascript
javascript基于DOM实现省市级联下拉框的方法
2015/05/14 Javascript
javascript实现树形菜单的方法
2015/07/17 Javascript
关于JS变量和作用域详解
2016/07/28 Javascript
js接收并转化Java中的数组对象的方法
2016/08/11 Javascript
jQuery基于cookie实现换肤功能实例
2017/10/14 jQuery
Vue中props的使用详解
2018/06/15 Javascript
简单学习5种处理Vue.js异常的方法
2019/06/17 Javascript
javascript实现弹出层效果
2019/12/10 Javascript
JavaScript设计模式之策略模式实现原理详解
2020/05/29 Javascript
vue data对象重新赋值无效(未更改)的解决方式
2020/07/24 Javascript
vue实现简易图片左右旋转,上一张,下一张组件案例
2020/07/31 Javascript
python pygame实现2048游戏
2018/11/20 Python
python wxpython 实现界面跳转功能
2019/12/17 Python
python解析多层json操作示例
2019/12/30 Python
python GUI库图形界面开发之PyQt5工具栏控件QToolBar的详细使用方法与实例
2020/02/28 Python
PyQt5中向单元格添加控件的方法示例
2020/03/24 Python
成功的餐厅经营创业计划书
2014/01/15 职场文书
工作保证书范文
2014/04/29 职场文书
学生检讨书
2015/01/27 职场文书
财政局长个人总结
2015/03/04 职场文书
爱心募捐通知范文
2015/04/27 职场文书
2016年班主任新年寄语
2015/08/18 职场文书
班主任远程培训研修日志
2015/11/13 职场文书
校园安全教育心得体会
2016/01/15 职场文书
Java实现简易的分词器功能
2021/06/15 Java/Android
Html5同时支持多端sdk的小技巧
2021/11/17 HTML / CSS
在Centos 8.0中安装Redis服务器的教程详解
2022/03/21 Redis
【海涛教你打DOTA】虚空假面第一视角骨弓3房29杀
2022/04/01 DOTA
Win11 vmware不兼容怎么办?Win11与VMware虚拟机不兼容的解决方法
2023/01/09 数码科技