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 相关文章推荐
推荐11个实用Python库
Jan 23 Python
Python结巴中文分词工具使用过程中遇到的问题及解决方法
Apr 15 Python
Python中asyncio与aiohttp入门教程
Oct 16 Python
python 在指定范围内随机生成不重复的n个数实例
Jan 28 Python
Python处理时间日期坐标轴过程详解
Jun 25 Python
Python Selenium参数配置方法解析
Jan 19 Python
使用Python爬虫库BeautifulSoup遍历文档树并对标签进行操作详解
Jan 25 Python
Python-opencv实现红绿两色识别操作
Jun 04 Python
利于python脚本编写可视化nmap和masscan的方法
Dec 29 Python
使用python实现学生信息管理系统
Feb 25 Python
python批量更改目录名/文件名的方法
Apr 18 Python
Python 数据可视化之Matplotlib详解
Nov 02 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
phpwind中的数据库操作类
2007/01/02 PHP
php apache开启跨域模式过程详解
2019/07/08 PHP
一个高效的JavaScript压缩工具下载集合
2007/03/06 Javascript
js定时器的使用(实例讲解)
2014/01/06 Javascript
纯JavaScript实现的兼容各浏览器的添加和移除事件封装
2015/03/28 Javascript
浅谈js中调用函数时加不加括号的问题
2016/07/28 Javascript
js实现各种复制到剪贴板的方法(分享)
2016/10/27 Javascript
JavaScript之iterable_动力节点Java学院整理
2017/06/29 Javascript
vue.js开发实现全局调用的MessageBox组件实例代码
2017/11/22 Javascript
NodeJS 将文件夹按照存放路径变成一个对应的JSON的方法
2018/10/17 NodeJs
Vue.js 中 axios 跨域访问错误问题及解决方法
2018/11/21 Javascript
详解基于electron制作一个node压缩图片的桌面应用
2019/01/29 Javascript
搭建一个nodejs脚手架的方法步骤
2019/06/28 NodeJs
微信小程序制作扭蛋机代码实例
2019/09/24 Javascript
layui表格设计以及数据初始化详解
2019/10/26 Javascript
使用python调用浏览器并打开一个网址的例子
2014/06/05 Python
python获取当前日期和时间的方法
2015/04/30 Python
Python实现股市信息下载的方法
2015/06/15 Python
python 调用c语言函数的方法
2017/09/29 Python
python 使用sys.stdin和fileinput读入标准输入的方法
2018/10/17 Python
Python使用matplotlib实现交换式图形显示功能示例
2019/09/06 Python
Python的in,is和id函数代码实例
2020/04/18 Python
python request 模块详细介绍
2020/11/10 Python
英国领先的体验日提供商:Buyagift
2019/04/19 全球购物
汽车专业毕业生自荐信
2013/11/03 职场文书
安全生产汇报材料
2014/02/17 职场文书
信用卡工作证明模板
2014/09/14 职场文书
副乡长民主生活会个人对照检查材料思想汇报
2014/10/01 职场文书
2014年销售工作总结与计划
2014/12/01 职场文书
2014年体育教师工作总结
2014/12/03 职场文书
2016年大学迎新晚会工作总结
2015/10/15 职场文书
《折线统计图》教学反思
2016/02/22 职场文书
Python机器学习三大件之一numpy
2021/05/10 Python
Redis延迟队列和分布式延迟队列的简答实现
2021/05/13 Redis
go goroutine 怎样进行错误处理
2021/07/16 Golang
ant design charts 获取后端接口数据展示
2022/05/25 Javascript