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中self的用法
Jun 04 Python
Python中的迭代器与生成器高级用法解析
Jun 28 Python
python 连接各类主流数据库的实例代码
Jan 30 Python
python+pandas分析nginx日志的实例
Apr 28 Python
python爬虫解决验证码的思路及示例
Aug 01 Python
python多项式拟合之np.polyfit 和 np.polyld详解
Feb 18 Python
python_mask_array的用法
Feb 18 Python
Python print不能立即打印的解决方式
Feb 19 Python
python数据类型可变不可变知识点总结
Mar 06 Python
Python requests模块session代码实例
Apr 14 Python
利用Python实现字幕挂载(把字幕文件与视频合并)思路详解
Oct 21 Python
实例讲解Python中sys.argv[]的用法
Jun 03 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
咖啡常见的种类
2021/03/03 新手入门
动态表单验证的操作方法和TP框架里面的ajax表单验证
2017/07/19 PHP
PHP日志LOG类定义与用法示例
2018/09/06 PHP
关于Curl在Swoole协程中的解决方案详析
2019/09/12 PHP
3种不同方式的焦点图轮播特效分享
2013/10/30 Javascript
Chrome扩展页面动态绑定JS事件提示错误
2014/02/11 Javascript
jquery 取子节点及当前节点属性值的方法
2014/08/24 Javascript
使用React实现轮播效果组件示例代码
2016/09/05 Javascript
AngularJS指令与指令之间的交互功能示例
2016/12/14 Javascript
AngularJS实现页面定时刷新
2017/03/14 Javascript
json的结构与遍历方法实例分析
2017/04/25 Javascript
js字符串与Unicode编码互相转换
2017/05/17 Javascript
基于AngularJS实现表单验证功能
2017/07/28 Javascript
elemetUi 组件--el-upload实现上传Excel文件的实例
2017/10/27 Javascript
JS开发常用工具函数(小结)
2019/07/04 Javascript
详解element-ui 表单校验 Rules 配置 常用黑科技
2020/07/11 Javascript
如何在vue中使用百度地图添加自定义覆盖物(水波纹)
2020/11/03 Javascript
[51:36]Optic vs Newbee 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
Python代码的打包与发布详解
2014/07/30 Python
Django中ORM表的创建和增删改查方法示例
2017/11/15 Python
python实现决策树分类算法
2017/12/21 Python
python文件转为exe文件的方法及用法详解
2019/07/08 Python
python Matplotlib底图中鼠标滑过显示隐藏内容的实例代码
2019/07/31 Python
解决Tensorboard可视化错误:不显示数据 No scalar data was found
2020/02/15 Python
python 画条形图(柱状图)实例
2020/04/24 Python
python中def是做什么的
2020/06/10 Python
Under Armour安德玛法国官网:美国高端运动科技品牌
2018/06/29 全球购物
Ryderwear澳洲官网:澳大利亚高端健身训练装备品牌
2018/09/18 全球购物
C++面试题:关于链表和指针
2013/06/05 面试题
皮肤科医师岗位职责
2013/12/04 职场文书
计算机专业毕业生自荐信范文
2014/03/06 职场文书
大学生两会学习心得体会
2014/03/10 职场文书
教师学习群众路线心得体会
2014/11/04 职场文书
道路交通事故人身损害赔偿协议书
2014/11/19 职场文书
写给孩子的新学期寄语
2015/02/27 职场文书
2015年上半年党建工作总结
2015/03/30 职场文书