【Python】 获取url的多级域名
2017-05-15 00:00
477 查看
import re from urlparse import urlparse class ExtractLevelDomain(): def __init__(self): self.topHostPostfix = [ '.com','.la','.io', '.co', '.cn','.info', '.net', '.org','.me', '.mobi', '.us', '.biz', '.xxx', '.ca', '.co.jp', '.com.cn', '.net.cn', '.org.cn', '.mx','.tv', '.ws', '.ag', '.com.ag', '.net.ag', '.org.ag','.am','.asia', '.at', '.be', '.com.br', '.net.br', '.name', '.live', '.news', '.bz', '.tech', '.pub', '.wang', '.space', '.top', '.xin', '.social', '.date', '.site', '.red', '.studio', '.link', '.online', '.help', '.kr', '.club', '.com.bz', '.net.bz', '.cc', '.band', '.market', '.com.co', '.net.co', '.nom.co', '.lawyer', '.de', '.es', '.com.es', '.nom.es', '.org.es', '.eu', '.wiki', '.design', '.software', '.fm', '.fr', '.gs', '.in', '.co.in', '.firm.in', '.gen.in', '.ind.in', '.net.in', '.org.in', '.it', '.jobs', '.jp', '.ms', '.com.mx', '.nl','.nu','.co.nz','.net.nz', '.org.nz', '.se', '.tc', '.tk', '.tw', '.com.tw', '.idv.tw', '.org.tw', '.hk', '.co.uk', '.me.uk', '.org.uk', '.vg'] self.extractPattern = r'[\.]('+'|'.join([h.replace('.',r'\.') for h in self.topHostPostfix])+')$' self.pattern = re.compile(self.extractPattern,re.IGNORECASE) self.level = "*" def parse_url(self,url): parts = urlparse(url) host = parts.netloc m = self.pattern.search(host) return m.group() if m else host def parse_url_level(self,url,level="*"): extractRule = self._parse_regex(level) parts = urlparse(url) host = parts.netloc pattern = re.compile(extractRule,re.IGNORECASE) m = pattern.search(host) self.level = level return m.group() if m else host def set_level(self,level): extractRule = self._parse_regex(level) self.extractPattern = extractRule self.pattern = re.compile(self.extractPattern,re.IGNORECASE) self.level = level def add_top_domain(self,top): if not top.startswith('.'): raise ValueError('top_domain must have . (.com|.com.cn|.net)') if top not in self.topHostPostfix: self.topHostPostfix.append(top) self._reset() return True else: return False def _reset(self): set_level(self.level) def _parse_regex(self,level): extractRule = r'(\w*\.?)%s('+'|'.join([h.replace('.',r'\.') for h in self.topHostPostfix])+')$' level = level if level == "*" else "{%s}"%level extractRule = extractRule%(level) return extractRule if __name__ == "__main__": filter = ExtractLevelDomain() print filter.level print filter.parse_url('http://dmp.301.xiaorui.cc/redirect/xiaorui.cc') print filter.parse_url_level('http://dmp.301.xiaorui.cc/redirect/xiaorui.cc',level=2) filter.set_level(1) print filter.parse_url_level('http://dmp.301.xiaorui.cc/redirect/xiaorui.cc',level=1) print filter.level
相关文章推荐
- [原创]自动获取当前URL所属主域的JS方法(适合多级域名)
- 从url获取域名 python
- js取得当前url,javascript获取当前页面url值,js获取域名
- url重写实现任意二级域名或多级域名(修正参数中断问题)
- asp.net获取当前网址url的各种属性(文件名、参数、域名 等)的代码
- 20110127 学习记录: .net获取当前url各种属性(文件名、参数、域名 等) & 鼠标手型
- asp.net获取当前网址url的各种属性(文件名、参数、域名 等)的代码
- 如何用js获取地址栏的URL的域名
- asp.net获取当前网址url的各种属性(文件名、参数、域名 等)的代码
- asp.net获取当前网址url的各种属性(文件名、参数、域名 等)的代码
- ASP.net获取当前url各种属性(文件名、参数、域名 等)的方法
- ASP.net获取当前网址url各种属性(文件名、参数、域名 等)的方法-转
- js取得当前url,javascript获取当前页面url值,js获取域名
- python模块之HTMLParser: 解析html,获取url
- python模块之HTMLParser: 解析html,获取url
- python获取url地址中的参数
- js取得当前url,javascript获取当前页面url值,js获取域名
- 【微软的URLRewriter】url重写实现任意二级域名或多级域名
- ASP.net获取当前url各种属性(文件名、参数、域名等)的方法
- ASP.net获取当前url各种属性(文件名、参数、域名 等)的方法