python实现切割url得到域名、协议、主机名等各个字段的例子
作者:Together_CZ 发布时间:2022-02-26 11:02:25
标签:python,切割url,域名,协议,主机名
有一个需求就是需要对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/')
来源:https://blog.csdn.net/Together_CZ/article/details/78520684


猜你喜欢
- 本文实例为大家分享了python实现用户名密码校验的具体代码,供大家参考,具体内容如下需要实现功能输入用户名密码 ;认证成功后显示 欢迎信息
- Method通过一条指令即可完成:os.system('所需指令')Note: os.system('所需指令
- 下面是我们经常会用到且非常有用的MySQL命令。下面你看到#表示在Unix命令行下执行命令,看到mysql>表示当前已经登录MySQL
- 高阶函数是在Python中一个非常有用的功能函数,所谓高阶函数就是一个函数可以用来接收另一个函数作为参数,这样的函数叫做高阶函数。pytho
- 目录业务需求:方案一:vuex-persistedstate方案二:vuex-persist总结业务需求:在基于vue开发SPA项目时,为了
- 前言相信大家在网上经常看到有人秀出各种各样的字符画,对于这个五彩斑斓的世界来说,我们日常看到的都是一些高清的彩色的图片,偶尔来个粗糙的黑白的
- 一、基本概念Reactive X中有几个核心的概念,先来简单介绍一下。1.1、Observable和Observer(可观察对象和观察者)首
- 一、使用sklearn转换器处理sklearn提供了model_selection模型选择模块、preprocessing数据预处理模块、d
- model的常用字段V=models.CharField(max_length=None[, **options])#varcharV=mo
- 区别与联系: 1、get是从服务器上获取数据,post则是向服务器传送数据; 2、get将表单中数据的按照variable=value的 形
- 1、python装饰器刚刚接触python的装饰器,简直懵逼了,直接不懂什么意思啊有木有,自己都忘了走了多少遍Debug,查了多少遍资料,猜
- 可实现类似于sql中的dateadd、datesub的功能两种获取日期的方式z=datetime.datetime(2016,12,5)z=
- 某些时候我们需要让类动态的添加属性或方法,比如我们在做插件时就可以采用这种方法。用一个配置文件指定需要加载的模块,可以根据业务扩展任意加入需
- js表单验证只能是写限定的东西大收集 代码如下:ENTER键可以让光标移到下一个输入框<input onkeydown=&q
- 运维平台导入数据这一功能实在是太重要了,我敢说在没有建自己的cmdb平台前,大多数公司管理服务器信息肯定是表格,用表格最麻烦的就是有点更新就
- python修改图像分辨率大小图像分辨率指图像中存储的信息量,是每英寸图像内有多少个像素点,分辨率的单位为PPI(Pixels Per In
- 前言新手程序员大概有如下特点if嵌套经常超过3层、经常出现重复代码、单个函数代码特别长。只会crud,对语言特性和语言的边界不了解。不懂面向
- 这篇文章主要介绍了Javascript Worker子线程代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价
- 阅读上一篇:javascript面向对象编程(三)继承是面向对象语言中的一个重要概念,现在我们来探讨一下继承。在网上搜一下javascrip
- 这种问题估计遇到的人不在少数,至少我遇到不下三次了,但每次解决后都没有形成深刻的印象,每次遇到还需要思考很久才能解决。这种情况常见的是这样的