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检测远程端口是否打开的方法
Mar 14 Python
python实现图片变亮或者变暗的方法
Jun 01 Python
Python中线程编程之threading模块的使用详解
Jun 23 Python
python 删除非空文件夹的实例
Apr 26 Python
详谈python3 numpy-loadtxt的编码问题
Apr 29 Python
Python进阶:生成器 懒人版本的迭代器详解
Jun 29 Python
Python 微信爬虫完整实例【单线程与多线程】
Jul 06 Python
python 控制台单行刷新,多行刷新实例
Feb 19 Python
解决python多线程报错:AttributeError: Can't pickle local object问题
Apr 08 Python
浅谈优化Django ORM中的性能问题
Jul 09 Python
使用gunicorn部署django项目的问题
Dec 30 Python
python 判断文件或文件夹是否存在
Mar 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+mysql实现无限级分类 | 树型显示分类关系
2006/11/19 PHP
扩展你的 PHP 之入门篇
2006/12/04 PHP
最令PHP初学者们头痛的十四个问题
2007/01/15 PHP
自己前几天写的无限分类类
2007/02/14 PHP
php 去除html标记--strip_tags与htmlspecialchars的区别详解
2013/06/26 PHP
PHP实现获取域名的方法小结
2014/11/05 PHP
PHP自定义函数判断是否为Get、Post及Ajax提交的方法
2017/07/27 PHP
PHP基于redis计数器类定义与用法示例
2018/02/08 PHP
PHP微信发送推送消息乱码的解决方法
2019/02/28 PHP
对laravel的session获取与存取方法详解
2019/10/08 PHP
JQuery里面的几种选择器 查找满足条件的元素$("#控件ID")
2011/08/23 Javascript
JavaScript调用后台的三种方法实例
2013/10/17 Javascript
jquery ajax,ashx,json的用法总结
2014/02/12 Javascript
js字符串日期yyyy-MM-dd转化为date示例代码
2014/03/06 Javascript
JS实现关键字搜索时的相关下拉字段效果
2014/08/05 Javascript
js实现数组转换成json
2015/06/26 Javascript
JS平滑无缝滚动效果的实现代码
2016/05/06 Javascript
PHP抓取HTTPS内容和错误处理的方法
2016/09/30 Javascript
javascript设计模式之中介者模式学习笔记
2017/02/15 Javascript
js仿新浪微博消息发布功能
2017/02/17 Javascript
详解在Angularjs中ui-sref和$state.go如何传递参数
2017/04/24 Javascript
Angular.JS中select下拉框设置value的方法
2017/06/20 Javascript
JavaScript实现左侧菜单效果
2017/12/14 Javascript
Bootstrap实现省市区三级联动(亲测可用)
2019/07/26 Javascript
微信小程序 搜索框组件代码实例
2019/09/06 Javascript
antd配置config-overrides.js文件的操作
2020/10/31 Javascript
使用webpack和rollup打包组件库的方法
2021/02/25 Javascript
Python3 queue队列模块详细介绍
2018/01/05 Python
Python实现数据可视化看如何监控你的爬虫状态【推荐】
2018/08/10 Python
Python图像处理实现两幅图像合成一幅图像的方法【测试可用】
2019/01/04 Python
详解Python多线程下的list
2020/07/03 Python
预备党员党校学习自我评价分享
2013/11/12 职场文书
出国考察邀请函
2014/01/21 职场文书
机械设计毕业生自荐信
2014/02/02 职场文书
浙江省杭州市平均工资标准是多少?
2019/07/09 职场文书
nginx搭建NFS网络文件系统
2022/04/14 Servers