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实现strcmp函数功能示例
Mar 25 Python
Python中的作用域规则详解
Jan 30 Python
Python 专题四 文件基础知识
Mar 20 Python
Python统计纯文本文件中英文单词出现个数的方法总结【测试可用】
Jul 25 Python
python三方库之requests的快速上手
Mar 04 Python
Python使用线程来接收串口数据的示例
Jul 02 Python
python requests证书问题解决
Sep 05 Python
python中的Elasticsearch操作汇总
Oct 30 Python
python 字段拆分详解
Dec 17 Python
Python dict和defaultdict使用实例解析
Mar 12 Python
tensorflow使用freeze_graph.py将ckpt转为pb文件的方法
Apr 22 Python
python 图像增强算法实现详解
Jan 24 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
php实现递归抓取网页类实例
2015/04/03 PHP
PHP环境搭建(php+Apache+mysql)
2016/11/14 PHP
解决 FireFox 下[使用event很麻烦] 的问题.
2006/08/22 Javascript
复制本贴标题和地址的js代码
2008/07/01 Javascript
浏览器常用高宽的jquery插件
2011/02/24 Javascript
jQuery.Validate验证库的使用介绍
2013/04/26 Javascript
bootstrap data与jquery .data
2014/07/07 Javascript
详解JavaScript ES6中的模板字符串
2015/07/28 Javascript
JQUERY表单暂存功能插件分享
2016/02/23 Javascript
基于javascript实现动态时钟效果
2020/08/18 Javascript
AngularJS基础 ng-click 指令示例代码
2016/08/01 Javascript
echarts饼图扇区添加点击事件的实例
2017/10/16 Javascript
js实现会跳动的日历效果(完整实例)
2017/10/18 Javascript
vue项目中的webpack-dev-sever配置方法
2017/12/14 Javascript
JavaScript原型对象、构造函数和实例对象功能与用法详解
2018/08/04 Javascript
jQuery仿移动端支付宝键盘的实现代码
2018/08/15 jQuery
简化版的vue-router实现思路详解
2018/10/19 Javascript
jQuery实现的老虎机跑动效果示例
2018/12/29 jQuery
详解JavaScript栈内存与堆内存
2019/04/04 Javascript
uni-app之APP和小程序微信授权方法
2019/05/09 Javascript
发布订阅模式在vue中的实际运用实例详解
2019/06/09 Javascript
Python读写Redis数据库操作示例
2014/03/18 Python
深入Python解释器理解Python中的字节码
2015/04/01 Python
Pycharm 设置默认头的图文教程
2019/01/17 Python
Python中字符串String的基本内置函数与过滤字符模块函数的基本用法
2019/05/27 Python
Pycharm自动添加文件头注释和函数注释参数的方法
2020/10/23 Python
详解background属性的8个属性值(面试题)
2020/11/02 HTML / CSS
linux系统都有哪些运行级别
2012/04/15 面试题
教师政风行风自查自纠报告
2014/10/21 职场文书
暑期实践个人总结
2015/03/06 职场文书
同学聚会感言一句话
2015/07/30 职场文书
2016年春节慰问信息大全
2015/11/30 职场文书
SpringBoot整合RabbitMQ的5种模式实战
2021/08/02 Java/Android
HTML5 新增内容和 API详解
2021/11/17 HTML / CSS
抖音动画片,皮皮虾,《治愈系》动画在用这首REMIX作为背景音乐,Anak ,The last world with you完整版
2022/03/16 杂记
SQL Server内存机制浅探
2022/04/06 SQL Server