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实现的二叉树算法和kmp算法实例
Apr 25 Python
Python下载懒人图库JavaScript特效
May 28 Python
用Python的Flask框架结合MySQL写一个内存监控程序
Nov 07 Python
Python的Flask框架中使用Flask-Migrate扩展迁移数据库的教程
Jun 14 Python
Python之日期与时间处理模块(date和datetime)
Feb 16 Python
Python扩展内置类型详解
Mar 26 Python
python使用turtle库绘制树
Jun 25 Python
Python多进程方式抓取基金网站内容的方法分析
Jun 03 Python
python 中如何获取列表的索引
Jul 02 Python
Python tkinter实现日期选择器
Feb 22 Python
python代码实现扫码关注公众号登录的实战
Nov 01 Python
使用Python通过企业微信应用给企业成员发消息
Apr 18 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 radio 单选框获取与保持值的实现代码
2010/05/15 PHP
php中关于普通表单多文件上传的处理方法
2011/03/25 PHP
php学习之简单计算器实现代码
2011/06/09 PHP
php数组去重的函数代码
2013/02/03 PHP
php使用Session和文件统计在线人数
2015/07/04 PHP
php实现简单的上传进度条
2015/11/17 PHP
PHPExcel导出2003和2007的excel文档功能示例
2017/01/04 PHP
ThinkPHP3.2.3框架Memcache缓存使用方法实例总结
2019/04/15 PHP
PHP反射原理与用法深入分析
2019/09/28 PHP
Node.js文件操作详解
2014/08/16 Javascript
JS实现简易图片轮播效果的方法
2015/03/25 Javascript
jQuery代码实现图片墙自动+手动淡入淡出切换效果
2016/05/09 Javascript
angularjs 源码解析之scope
2016/08/22 Javascript
js读取json文件片段中的数据实例
2017/03/09 Javascript
vue2.0自定义指令示例代码详解
2019/04/25 Javascript
js获取本日、本周、本月的时间代码
2020/02/01 Javascript
基于JS实现计算24点算法代码实例解析
2020/07/23 Javascript
Python入门篇之编程习惯与特点
2014/10/17 Python
使用Python程序抓取新浪在国内的所有IP的教程
2015/05/04 Python
tensorflow中next_batch的具体使用
2018/02/02 Python
python爬虫之验证码篇3-滑动验证码识别技术
2019/04/11 Python
Python中最好用的命令行参数解析工具(argparse)
2019/08/23 Python
win7下 python3.6 安装opencv 和 opencv-contrib-python解决 cv2.xfeatures2d.SIFT_create() 的问题
2019/10/24 Python
TensorFlow Saver:保存和读取模型参数.ckpt实例
2020/02/10 Python
Python2手动安装更新pip过程实例解析
2020/07/16 Python
python解包用法详解
2021/02/17 Python
CSS3样式linear-gradient的使用实例
2017/01/16 HTML / CSS
学生会主席就职演讲稿
2014/01/14 职场文书
煤矿安全生产月活动总结
2014/07/05 职场文书
导航工程专业自荐信
2014/09/02 职场文书
农民工预备党员思想汇报
2014/09/14 职场文书
自查自纠工作情况报告
2014/10/29 职场文书
2015年党风建设工作总结
2015/04/29 职场文书
致短跑运动员加油稿
2015/07/21 职场文书
CSS 实现多彩、智能的阴影效果
2021/05/12 HTML / CSS
win10截图快捷键win+shift+s没有反应无法截图怎么解决?
2022/08/14 数码科技