python实现切割url得到域名、协议、主机名等各个字段的例子
有一个需求就是需要对url进行进一步的划分得到详细的各个字段信息,下面是简单的实现:
#!/usr/bin/python
#-*-coding:UTF-8-*-
'''
__Author__:沂水寒城
功能:对URL进行分割,基于urlparse,publicsuffix,urllib编写
'''
fromurlparseimporturlparse
importcodecs
frompublicsuffiximportPublicSuffixList
fromurllibimportsplitport
importre
defdomain_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'.'indomain:
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
returnserver,host,top,hostname
defurl_split_new(url):
'''
url分割
'''
ifnoturl.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)
ifport==None:port=''
return{'protocol':parts.scheme,'hostname':hostname,'path':parts.path}
if__name__=='__main__':
printurl_split_new('http://www.baidu.com/')
printurl_split('http://www.baidu.com/')
以上这篇python实现切割url得到域名、协议、主机名等各个字段的例子就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。