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 快速实现CLI 应用程序的脚手架
Dec 05 Python
python MysqlDb模块安装及其使用详解
Feb 23 Python
python判断设备是否联网的方法
Jun 29 Python
python中文编码与json中文输出问题详解
Aug 24 Python
python3使用QQ邮箱发送邮件
May 20 Python
pyqt远程批量执行Linux命令程序的方法
Feb 14 Python
tensorflow求导和梯度计算实例
Jan 23 Python
python 使用while循环输出*组成的菱形实例
Apr 12 Python
Django ORM filter() 的运用详解
May 14 Python
Pytorch上下采样函数--interpolate用法
Jul 07 Python
解决import tensorflow导致jupyter内核死亡的问题
Feb 06 Python
Python 详解通过Scrapy框架实现爬取百度新冠疫情数据流程
Nov 11 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下foreach提示Warning:Invalid argument supplied for foreach()的解决方法
2014/11/11 PHP
PHP异常处理定义与使用方法分析
2017/07/25 PHP
你真的了解JavaScript吗?
2007/02/24 Javascript
Locate a File Using a File Open Dialog Box
2007/06/18 Javascript
javascript 精粹笔记
2010/05/09 Javascript
js实现兼容IE6与IE7的DIV高度
2010/05/13 Javascript
js动画(animate)简单引擎代码示例
2012/12/04 Javascript
漂亮的jquery提示效果(仿腾讯弹出层)
2013/02/05 Javascript
javascript firefox 自动加载iframe 自动调整高宽示例
2013/08/27 Javascript
js中prototype用法详细介绍
2013/11/14 Javascript
javascript模拟实现C# String.format函数功能代码
2013/11/25 Javascript
jquery中的过滤操作详细解析
2013/12/02 Javascript
当jQuery1.7遇上focus方法的问题
2014/01/26 Javascript
javascript自动切换焦点控制效果完整实例
2016/02/02 Javascript
详解jQuery中的deferred对象的使用(一)
2016/05/27 Javascript
jquery checkbox无法用attr()二次勾选问题的解决方法
2016/07/22 Javascript
使用webpack搭建react开发环境的方法
2018/05/15 Javascript
详解angular分页插件tm.pagination二次触发问题解决方案
2018/07/20 Javascript
Node.js中的不安全跳转如何防御详解
2018/10/21 Javascript
使用electron实现百度网盘悬浮窗口功能的示例代码
2018/10/24 Javascript
详解vuex之store拆分即多模块状态管理(modules)篇
2018/11/13 Javascript
layui数据表格跨行自动合并的例子
2019/09/02 Javascript
layui实现数据表格隐藏列的示例
2019/10/25 Javascript
vue+springboot图片上传和显示的示例代码
2020/02/14 Javascript
vue实现导航标题栏随页面滚动渐隐渐显效果
2020/03/12 Javascript
python结合opencv实现人脸检测与跟踪
2015/06/08 Python
Python爬虫框架Scrapy基本用法入门教程
2018/07/26 Python
Python控制Firefox方法总结
2019/06/03 Python
python多进程下的生产者和消费者模型
2020/05/07 Python
教育技术学专业职业规划书
2014/03/03 职场文书
村党支部书记承诺书
2014/05/29 职场文书
党的群众教育实践活动实施方案
2014/06/12 职场文书
2015年艾滋病宣传活动总结
2015/03/27 职场文书
个人廉政承诺书
2015/04/28 职场文书
工厂员工辞职信范文
2015/05/12 职场文书
numpy array找出符合条件的数并赋值的示例代码
2022/06/01 Python