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获取beautifulphoto随机某图片代码实例
Dec 18 Python
Python实现身份证号码解析
Sep 01 Python
使用Python读写文本文件及编写简单的文本编辑器
Mar 11 Python
python编写暴力破解zip文档程序的实例讲解
Apr 24 Python
python 通过logging写入日志到文件和控制台的实例
Apr 28 Python
详解python while 函数及while和for的区别
Sep 07 Python
对python3中, print横向输出的方法详解
Jan 28 Python
python实现统计文本中单词出现的频率详解
May 20 Python
Python类反射机制使用实例解析
Dec 30 Python
python 图像判断,清晰度(明暗),彩色与黑白实例
Jun 04 Python
django中ImageField的使用详解
Dec 21 Python
python re模块常见用法例举
Mar 01 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
E路文章系统PHP
2006/12/11 PHP
php allow_url_include的应用和解释
2010/04/22 PHP
一个简洁的PHP可逆加密函数(分享)
2013/06/06 PHP
php 防止表单重复提交两种实现方法
2016/11/03 PHP
在TP5数据库中四个字段实现无限分类的示例
2019/10/18 PHP
PHP For循环字母A-Z当超过26个字母时输出AA,AB,AC
2020/02/16 PHP
根据判断浏览器类型屏幕分辨率自动调用不同CSS的代码
2007/02/22 Javascript
JQuery CSS样式控制 学习笔记
2009/07/23 Javascript
JavaScript Scoping and Hoisting 翻译
2012/07/03 Javascript
Windows8下搭建Node.js开发环境教程
2014/09/03 Javascript
Position属性之relative用法
2015/12/14 Javascript
jquery淡入淡出效果简单实例
2016/01/14 Javascript
JS使用面向对象技术实现的tab选项卡效果示例
2017/02/28 Javascript
使用VueCli3+TypeScript+Vuex一步步构建todoList的方法
2019/07/25 Javascript
vue子组件改变父组件传递的prop值通过sync实现数据双向绑定(DEMO)
2020/02/01 Javascript
Python的gevent框架的入门教程
2015/04/29 Python
python利用微信公众号实现报警功能
2018/06/10 Python
python 统计一个列表当中的每一个元素出现了多少次的方法
2018/11/14 Python
Python如何调用JS文件中的函数
2019/08/16 Python
python3 selenium自动化 下拉框定位的例子
2019/08/23 Python
Python递归求出列表(包括列表中的子列表)的最大值实例
2020/02/27 Python
SQL语言面试题
2013/08/27 面试题
Python面试题集
2012/03/08 面试题
函授自我鉴定范文
2014/02/06 职场文书
八一建军节感言
2014/02/28 职场文书
表决心的诗句大全
2014/03/11 职场文书
静心口服夜广告词
2014/03/20 职场文书
车辆年审委托书范本
2014/09/18 职场文书
三峡人家导游词
2015/01/31 职场文书
餐饮店长岗位职责
2015/04/14 职场文书
学生会招新宣传语
2015/07/13 职场文书
教务处干事工作总结
2015/08/14 职场文书
放飞理想主题班会
2015/08/14 职场文书
SpringBoot 集成Redis 过程
2021/06/02 Redis
javascript函数式编程基础
2021/09/15 Javascript
斗罗大陆八大特殊魂兽,龙族始祖排榜首,第五最残忍(翠魔鸟)
2022/03/18 国漫