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入门篇之面向对象
Oct 20 Python
Python基本语法经典教程
Mar 11 Python
Python计算字符宽度的方法
Jun 14 Python
Django返回json数据用法示例
Sep 18 Python
深入理解python中的atexit模块
Mar 07 Python
Python实现判断一个字符串是否包含子串的方法总结
Nov 21 Python
Python matplotlib 画图窗口显示到gui或者控制台的实例
May 24 Python
python批量复制图片到另一个文件夹
Sep 17 Python
浅谈python函数调用返回两个或多个变量的方法
Jan 23 Python
Python3 执行系统命令并获取实时回显功能
Jul 09 Python
django3.02模板中的超链接配置实例代码
Feb 04 Python
python对接ihuyi实现短信验证码发送
May 10 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生成局部唯一识别码LUID的代码
2012/10/06 PHP
php 中文字符串首字母的获取函数分享
2013/11/04 PHP
PHP简单的MVC框架实现方法
2015/12/01 PHP
thinkPHP+ajax实现统计页面pv浏览量的方法
2017/03/15 PHP
Js 本页面传值实现代码
2009/05/17 Javascript
JavaScript CSS修改学习第一章 查找位置
2010/02/19 Javascript
用示例说明filter()与find()的用法以及children()与find()的区别分析
2013/04/26 Javascript
Javascript优化技巧之短路表达式详细介绍
2015/03/27 Javascript
ECMAScript6函数默认参数
2015/06/12 Javascript
js实现div在页面拖动效果
2016/05/04 Javascript
js事件源window.event.srcElement兼容性写法(详解)
2016/11/25 Javascript
Express与NodeJs创建服务器的两种方法
2017/02/06 NodeJs
angular2 ng build部署后base文件路径问题详细解答
2017/07/15 Javascript
jQuery动态添加.active 实现导航效果代码思路详解
2017/08/29 jQuery
浅谈用Webpack路径压缩图片上传尺寸获取的问题
2018/02/22 Javascript
从零学python系列之数据处理编程实例(一)
2014/05/22 Python
操作Windows注册表的简单的Python程序制作教程
2015/04/07 Python
Python3.2中的字符串函数学习总结
2015/04/23 Python
CentOS中使用virtualenv搭建python3环境
2015/06/08 Python
Python实现随机生成有效手机号码及身份证功能示例
2017/06/05 Python
python通过socket实现多个连接并实现ssh功能详解
2017/11/08 Python
python SSH模块登录,远程机执行shell命令实例解析
2018/01/12 Python
Python cookbook(数据结构与算法)从字典中提取子集的方法示例
2018/03/22 Python
Python二叉树定义与遍历方法实例分析
2018/05/25 Python
Django中日期处理注意事项与自定义时间格式转换详解
2018/08/06 Python
python实现音乐播放器 python实现花框音乐盒子
2020/02/25 Python
Python数据可视化实现漏斗图过程图解
2020/07/20 Python
python如何停止递归
2020/09/09 Python
详解如何修改jupyter notebook的默认目录和默认浏览器
2021/01/24 Python
CSS改变网页中鼠标选中文字背景颜色例子
2014/04/23 HTML / CSS
秘鲁购物网站:Linio秘鲁
2017/04/07 全球购物
公司股东合作协议书
2014/09/14 职场文书
学校领导班子四风问题整改意见
2014/10/02 职场文书
居委会工作总结2015
2015/05/18 职场文书
七年级思品教学反思
2016/02/20 职场文书
JavaScript利用html5新方法操作元素类名详解
2021/11/27 Javascript