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语言的优雅之处
Jul 04 Python
Python警察与小偷的实现之一客户端与服务端通信实例
Oct 09 Python
Python中的左斜杠、右斜杠(正斜杠和反斜杠)
Aug 30 Python
Python socket网络编程TCP/IP服务器与客户端通信
Jan 05 Python
Python中字典(dict)合并的四种方法总结
Aug 10 Python
Python如何快速上手? 快速掌握一门新语言的方法
Nov 14 Python
对numpy中的数组条件筛选功能详解
Jul 02 Python
使用CodeMirror实现Python3在线编辑器的示例代码
Jan 14 Python
pytorch nn.Conv2d()中的padding以及输出大小方式
Jan 10 Python
Python常用库大全及简要说明
Jan 17 Python
TensorFlow 多元函数的极值实例
Feb 10 Python
python 利用toapi库自动生成api
Oct 19 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实现WEB动态网页静态
2006/10/09 PHP
如何去掉文章里的 html 语法
2006/10/09 PHP
PHP变量的定义、可变变量、变量引用、销毁方法
2013/12/20 PHP
php生成图片验证码
2015/06/09 PHP
IIS 7.5 asp Session超时时间设置方法
2017/04/17 PHP
jscript之Read an Excel Spreadsheet
2007/06/13 Javascript
js查错流程归纳
2012/05/04 Javascript
JS字符串累加Array不一定比字符串累加快(根据电脑配置)
2012/05/14 Javascript
使用JavaScript 实现各种跨域的方法
2013/05/08 Javascript
javascript实现画不相交的圆
2015/04/07 Javascript
jquery 实现回车登录详解及实例代码
2016/10/23 Javascript
捕获未处理的Promise错误方法
2017/10/13 Javascript
详解JavaScript对数组操作(添加/删除/截取/排序/倒序)
2019/04/28 Javascript
微信小程序在线客服自动回复功能(基于node)
2019/07/03 Javascript
详解微信小程序之提高应用速度小技巧
2020/01/07 Javascript
vue总线机制(bus)知识点详解
2020/05/10 Javascript
Vue 封装防刷新考试倒计时组件的实现
2020/06/05 Javascript
Node.JS如何实现JWT原理
2020/09/18 Javascript
Vue 的 v-model用法实例
2020/11/23 Vue.js
Python实现微信公众平台自定义菜单实例
2015/03/20 Python
django站点管理详解
2017/12/12 Python
python try except返回异常的信息字符串代码实例
2019/08/15 Python
python GUI库图形界面开发之PyQt5信号与槽基本操作
2020/02/25 Python
基于jupyter代码无法在pycharm中运行的解决方法
2020/04/21 Python
Python发起请求提示UnicodeEncodeError错误代码解决方法
2020/04/21 Python
基于matplotlib中ion()和ioff()的使用详解
2020/06/16 Python
python三引号如何输入
2020/07/06 Python
Python实现王者荣耀自动刷金币的完整步骤
2021/01/22 Python
canvas之万花筒效果的简单实现(推荐)
2016/08/16 HTML / CSS
纯css实现照片墙3D效果的示例代码
2017/11/13 HTML / CSS
泰国王权免税店官方网站:KingPower
2019/03/11 全球购物
网络方面基础面试题
2012/11/16 面试题
兼职学生的自我评价
2013/11/24 职场文书
个人借款担保书
2014/04/02 职场文书
法定代表人授权委托书范文
2014/09/22 职场文书
Python图片处理之图片裁剪教程
2021/05/27 Python