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语言使用技巧分享
May 31 Python
python3批量删除豆瓣分组下的好友的实现代码
Jun 07 Python
pycharm+django创建一个搜索网页实例代码
Jan 24 Python
python实现冒泡排序算法的两种方法
Mar 10 Python
[原创]Python入门教程4. 元组基本操作
Oct 31 Python
python 实现得到当前时间偏移day天后的日期方法
Dec 31 Python
python微信撤回监测代码
Apr 29 Python
Python实现EXCEL表格的排序功能示例
Jun 25 Python
python文件转为exe文件的方法及用法详解
Jul 08 Python
如何用Python破解wifi密码过程详解
Jul 12 Python
jupyter notebook中美观显示矩阵实例
Apr 17 Python
python中xlrd模块的使用详解
Feb 01 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下实现农历日历的代码
2007/03/07 PHP
PHP 删除文件与文件夹操作 unlink()与rmdir()这两个函数的使用
2011/07/17 PHP
百度地图API使用方法详解
2015/08/25 PHP
整理php防注入和XSS攻击通用过滤
2015/09/13 PHP
PHP使用redis实现统计缓存mysql压力的方法
2015/11/14 PHP
Linux下源码包安装Swoole及基本使用操作图文详解
2019/04/02 PHP
php实现统计IP数及在线人数的示例代码
2020/07/22 PHP
仿服务器端脚本方式的JS模板实现方法
2007/04/27 Javascript
回车直接实现点击某按钮的效果即触发单击事件
2014/02/27 Javascript
jquery插件之定时查询待处理任务数量
2014/05/01 Javascript
js实现感应鼠标图片透明度变化的方法
2015/02/20 Javascript
jquery zTree异步加载、模糊搜索简单实例分享
2016/03/24 Javascript
javascript鼠标滑过显示二级菜单特效
2020/11/18 Javascript
jQuery插件FusionWidgets实现的Bulb图效果示例【附demo源码下载】
2017/03/23 jQuery
高性能的javascript之加载顺序与执行原理篇
2018/01/14 Javascript
详解Vue源码学习之callHook钩子函数
2018/07/25 Javascript
微信小程序框架wepy之动态控制类名
2018/09/14 Javascript
layui实现数据表格自定义数据项
2019/10/26 Javascript
从0搭建vue-cli4脚手架
2020/06/17 Javascript
基于Vue全局组件与局部组件的区别说明
2020/08/11 Javascript
Vuex实现购物车小功能
2020/08/17 Javascript
[41:52]2018DOTA2亚洲邀请赛3月29日小组赛B组Effect VS Secret
2018/03/30 DOTA
python 实现在txt指定行追加文本的方法
2018/04/29 Python
PySide和PyQt加载ui文件的两种方法
2019/02/27 Python
详解用python写网络爬虫-爬取新浪微博评论
2019/05/10 Python
python爬虫 execjs安装配置及使用
2019/07/30 Python
pycharm实现在虚拟环境中引入别人的项目
2020/03/09 Python
Python2及Python3如何实现兼容切换
2020/09/01 Python
Python判断字符串是否为合法标示符操作
2020/09/03 Python
详解Django ORM引发的数据库N+1性能问题
2020/10/12 Python
应届行政管理专业个人自我评价
2013/12/28 职场文书
银行员工辞职信范文
2014/01/20 职场文书
环保标语大全
2014/06/12 职场文书
私人房屋买卖协议书
2014/10/04 职场文书
2015年员工工作总结范文
2015/04/08 职场文书
标准演讲稿格式结尾应该怎么书写?
2019/07/17 职场文书