Python实现从url中提取域名的几种方法


Posted in Python onSeptember 26, 2014

从url中找到域名,首先想到的是用正则,然后寻找相应的类库。用正则解析有很多不完备的地方,url中有域名,域名后缀一直在不断增加等。通过google查到几种方法,一种是用Python中自带的模块和正则相结合来解析域名,另一种是使第三方用写好的解析模块直接解析出域名。

要解析的url

urls = ["http://meiwen.me/src/index.html",

          "http://1000chi.com/game/index.html",

          "http://see.xidian.edu.cn/cpp/html/1429.html",

          "https://docs.python.org/2/howto/regex.html",

          """https://www.google.com.hk/search?client=aff-cs-360chromium&hs=TSj&q=url%E8%A7%A3%E6%9E%90%E5%9F%9F%E5%90%8Dre&oq=url%E8%A7%A3%E6%9E%90%E5%9F%9F%E5%90%8Dre&gs_l=serp.3...74418.86867.0.87673.28.25.2.0.0.0.541.2454.2-6j0j1j1.8.0....0...1c.1j4.53.serp..26.2.547.IuHTj4uoyHg""",

          "file:///D:/code/echarts-2.0.3/doc/example/tooltip.html",

          "http://api.mongodb.org/python/current/faq.html#is-pymongo-thread-safe",

          "https://pypi.python.org/pypi/publicsuffix/",

          "http://127.0.0.1:8000"

          ]

使用urlparse+正则的方式

import re

from urlparse import urlparse
topHostPostfix = (

    '.com','.la','.io','.co','.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',

    '.bz','.com.bz','.net.bz','.cc','.com.co','.net.co',

    '.nom.co','.de','.es','.com.es','.nom.es','.org.es',

    '.eu','.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', ".com.hk")
regx = r'[^\.]+('+'|'.join([h.replace('.',r'\.') for h in topHostPostfix])+')$'

pattern = re.compile(regx,re.IGNORECASE)
print "--"*40

for url in urls:

    parts = urlparse(url)

    host = parts.netloc

    m = pattern.search(host)

    res =  m.group() if m else host

    print "unkonw" if not res else res

运行结果如下:

meiwen.me

1000chi.com

see.xidian.edu.cn

python.org

google.com.hk

unkonw

mongodb.org

python.org

127.0.0.1:8000

基本可以接受

urllib来解析域名

import urllib
print "--"*40

for url in urls:

    proto, rest = urllib.splittype(url)

    res, rest = urllib.splithost(rest)

    print "unkonw" if not res else res

运行结果如下:

meiwen.me

1000chi.com

see.xidian.edu.cn

docs.python.org

www.google.com.hk

unkonw

api.mongodb.org

pypi.python.org

127.0.0.1:8000

会把www.也带上,还需要进一步解析才可以

使用第三方模块 tld

from tld import get_tld
print "--"*40

for url in urls:

    try:

        print  get_tld(url)

    except Exception as e:

        print "unkonw"

运行结果:

meiwen.me

1000chi.com

xidian.edu.cn

python.org

google.com.hk

unkonw

mongodb.org

python.org

unkonw

结果都可以接受

其他可以使用的解析模块:

tld
tldextract
publicsuffix

Python 相关文章推荐
使用Python实现一个简单的项目监控
Mar 31 Python
举例讲解Python中is和id的用法
Apr 03 Python
深入理解Python中字典的键的使用
Aug 19 Python
python批量添加zabbix Screens的两个脚本分享
Jan 16 Python
Python+PIL实现支付宝AR红包
Feb 09 Python
在双python下设置python3为默认的方法
Oct 31 Python
在python3中pyqt5和mayavi不兼容问题的解决方法
Jan 08 Python
详解python tkinter教程-事件绑定
Mar 28 Python
python多线程下信号处理程序示例
May 31 Python
opencv导入头文件时报错#include的解决方法
Jul 31 Python
Django通用类视图实现忘记密码重置密码功能示例
Dec 17 Python
三步解决python PermissionError: [WinError 5]拒绝访问的情况
Apr 22 Python
Python实现的一个简单LRU cache
Sep 26 #Python
python网络编程实例简析
Sep 26 #Python
python的re模块应用实例
Sep 26 #Python
python实现自动登录人人网并访问最近来访者实例
Sep 26 #Python
编程语言Python的发展史
Sep 26 #Python
python人人网登录应用实例
Sep 26 #Python
python快速查找算法应用实例
Sep 26 #Python
You might like
php 生成唯一id的几种解决方法
2013/03/08 PHP
Linux系统下php获得系统分区信息的方法
2015/03/30 PHP
区分JS中的undefined,null,"",0和false
2007/03/08 Javascript
JavaScript常用对象的方法和属性小结
2012/01/24 Javascript
jQuery随机切换图片的小例子
2013/04/18 Javascript
Jqgrid设置全选(选择)及获取选择行的值示例代码
2013/12/28 Javascript
jquery.ajax的url中传递中文乱码问题的解决方法
2014/02/07 Javascript
jQuery学习笔记之 Ajax操作篇(一) - 数据加载
2014/06/23 Javascript
Avalon中文长字符截取、关键字符隐藏、自定义过滤器
2016/05/18 Javascript
完美解决jQuery符号$与其他javascript 库、框架冲突的问题
2016/08/09 Javascript
layui文件上传实现代码
2017/05/20 Javascript
在angularJs中进行数据遍历的2种方法
2018/10/08 Javascript
详解无限滚动插件vue-infinite-scroll源码解析
2019/05/12 Javascript
微信小程序wx.request拦截器使用详解
2019/07/09 Javascript
Vue组件模板的几种书写形式(3种)
2020/02/19 Javascript
python绘制评估优化算法性能的测试函数
2019/06/25 Python
python numpy 常用随机数的产生方法的实现
2019/08/21 Python
wxPython色环电阻计算器
2019/11/18 Python
Python模块_PyLibTiff读取tif文件的实例
2020/01/13 Python
python正则过滤字母、中文、数字及特殊字符方法详解
2020/02/11 Python
Tensorflow中的降维函数tf.reduce_*使用总结
2020/04/20 Python
jupyter notebook的安装与使用详解
2020/05/18 Python
详解pyqt5的UI中嵌入matplotlib图形并实时刷新(挖坑和填坑)
2020/08/07 Python
Python datetime模块的使用示例
2021/02/02 Python
CSS3 background-image颜色渐变的实现代码
2018/09/13 HTML / CSS
物流业务员岗位职责
2014/02/08 职场文书
《秋游》教学反思
2014/04/24 职场文书
运动会口号16字
2014/06/07 职场文书
领导干部保密承诺书
2014/08/30 职场文书
办理信用卡收入证明范例
2014/09/13 职场文书
2015年春节标语口号
2014/12/09 职场文书
2014年绩效考核工作总结
2014/12/11 职场文书
开业典礼致辞
2015/07/29 职场文书
读鲁迅先生的经典名言
2019/08/20 职场文书
sqlserver2017共享功能目录路径不可改的解决方法
2021/04/16 SQL Server
javascript的var与let,const之间的区别详解
2022/02/18 Javascript