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中编写ORM框架的入门指引
Apr 29 Python
离线安装Pyecharts的步骤以及依赖包流程
Apr 23 Python
利用 python 对目录下的文件进行过滤删除
Dec 27 Python
python 读文件,然后转化为矩阵的实例
Apr 23 Python
Python 打印中文字符的三种方法
Aug 14 Python
python简单操作excle的方法
Sep 12 Python
使用 Python ssh 远程登陆服务器的最佳方案
Mar 06 Python
Python实现猜年龄游戏代码实例
Mar 25 Python
快速解决jupyter notebook启动需要密码的问题
Apr 21 Python
Django多层嵌套ManyToMany字段ORM操作详解
May 19 Python
python抢购软件/插件/脚本附完整源码
Mar 04 Python
Python selenium模拟网页点击爬虫交管12123违章数据
May 26 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 多行多列显示
2009/08/15 PHP
基于ubuntu下nginx+php+mysql安装配置的具体操作步骤
2013/04/28 PHP
php变量作用域的深入解析
2013/06/03 PHP
PHP数据库操作二:memcache用法分析
2017/08/16 PHP
PHP正则判断一个变量是否为正整数的方法
2019/02/27 PHP
jQuery.Validate 使用笔记(jQuery Validation范例 )
2010/06/25 Javascript
JQuery文本改变触发事件如聚焦事件、失焦事件
2014/01/15 Javascript
一个支付页面DEMO附截图
2014/07/22 Javascript
js实现页面跳转的几种方法小结
2016/05/16 Javascript
微信小程序 UI布局常用技巧整理总结
2016/12/05 Javascript
nodeJS实现简单网页爬虫功能的实例(分享)
2017/06/08 NodeJs
javascript实现数字配对游戏的实例讲解
2017/12/14 Javascript
看看“疫苗查询”小程序有温度的代码
2018/07/31 Javascript
深入浅析ng-bootstrap 组件集中 tabset 组件的实现分析
2019/07/19 Javascript
js单线程的本质 Event Loop解析
2019/10/29 Javascript
VUE中V-IF条件判断改变元素的样式操作
2020/08/09 Javascript
UEditor 自定义图片视频尺寸校验功能的实现代码
2020/10/20 Javascript
Javascript柯里化实现原理及作用解析
2020/10/22 Javascript
[58:23]LGD vs TNC 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
详谈Pandas中iloc和loc以及ix的区别
2018/06/08 Python
Django安装配置mysql的方法步骤
2018/10/15 Python
将python文件打包成EXE应用程序的方法
2019/05/22 Python
python+webdriver自动化环境搭建步骤详解
2019/06/03 Python
Python栈的实现方法示例【列表、单链表】
2020/02/22 Python
深入浅析python变量加逗号,的含义
2020/02/22 Python
HTML5自定义元素播放焦点图动画的实现
2019/09/25 HTML / CSS
美国在线精品家居网站:Burke Decor
2017/04/12 全球购物
荷兰鞋子在线:Nelson Schoenen
2017/12/25 全球购物
关于圣诞节的广播稿
2014/01/26 职场文书
学校财务管理制度
2015/08/04 职场文书
学前班教学反思
2016/02/24 职场文书
浅谈redis缓存在项目中的使用
2021/05/20 Redis
Python中的np.argmin()和np.argmax()函数用法
2021/06/02 Python
多人盗宝《绿林侠盗》第三赛季4.5上线 跨平台实装
2022/04/03 其他游戏
Windows Server 2008配置防火墙策略详解
2022/06/28 Servers
Nginx如何限制IP访问只允许特定域名访问
2022/07/23 Servers