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中的默认参数详解
Jun 24 Python
Python实现的栈、队列、文件目录遍历操作示例
May 06 Python
Python 实现还原已撤回的微信消息
Jun 18 Python
Python中pymysql 模块的使用详解
Aug 12 Python
Python range、enumerate和zip函数用法详解
Sep 11 Python
django从后台返回html代码的实例
Mar 11 Python
Python能做什么
Jun 02 Python
使用pyplot.matshow()函数添加绘图标题
Jun 16 Python
浅谈Python 参数与变量
Jun 20 Python
PIP和conda 更换国内安装源的方法步骤
Sep 21 Python
Python制作简单的剪刀石头布游戏
Dec 10 Python
微软开源最强Python自动化神器Playwright(不用写一行代码)
Jan 05 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实现详细解析
2013/08/24 PHP
PHP7新增函数
2021/03/09 PHP
测试你的JS的掌握程度的代码
2009/12/09 Javascript
javascript alert乱码的解决方法
2013/11/05 Javascript
jQuery动态星级评分效果实现方法
2015/08/06 Javascript
CSS javascript 结合实现悬浮固定菜单效果
2015/08/23 Javascript
探究Vue.js 2.0新增的虚拟DOM
2016/10/20 Javascript
用jQuery的AJax实现异步访问、异步加载
2016/11/02 Javascript
AngularJS开发教程之控制器之间的通信方法分析
2016/12/25 Javascript
JavaScript判断浏览器及其版本信息
2017/01/20 Javascript
JS匹配日期和时间的正则表达式示例
2017/05/12 Javascript
Grunt针对静态文件的压缩,版本控制打包的实例讲解
2017/09/29 Javascript
vue.js默认路由不加载linkActiveClass问题的解决方法
2017/12/11 Javascript
微信小程序手机号码验证功能的实例代码
2018/08/28 Javascript
详解Node.js读写中文内容文件操作
2018/10/10 Javascript
基于vue如何发布一个npm包的方法步骤
2019/05/15 Javascript
javascript移动端 电子书 翻页效果实现代码
2019/09/07 Javascript
Python中查看文件名和文件路径
2017/03/31 Python
Python简单实现网页内容抓取功能示例
2018/06/07 Python
Python实现报警信息实时发送至邮箱功能(实例代码)
2019/11/11 Python
python、Matlab求定积分的实现
2019/11/20 Python
python3连接kafka模块pykafka生产者简单封装代码
2019/12/23 Python
python扫描线填充算法详解
2020/02/19 Python
Python使用进程Process模块管理资源
2020/03/05 Python
关于python 跨域处理方式详解
2020/03/28 Python
Django admin管理工具TabularInline类用法详解
2020/05/14 Python
Python 发送邮件方法总结
2020/08/10 Python
CSS3属性box-shadow使用指南
2014/12/09 HTML / CSS
CSS3 按钮边框动画的实现
2020/11/12 HTML / CSS
Halston Heritage官网:简洁的日装,稍显奢华的晚装
2018/11/20 全球购物
俄罗斯品牌服装和鞋子的在线商店:KUPIVIP
2019/10/27 全球购物
莫斯科制造商的廉价皮大衣:Fursk
2020/06/09 全球购物
医院门卫岗位职责
2013/12/30 职场文书
MySQL中rank() over、dense_rank() over、row_number() over用法介绍
2022/03/23 MySQL
如何利用python实现Simhash算法
2022/06/28 Python
MySQL常用慢查询分析工具详解
2022/08/14 MySQL