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中的作用域规则详解
Jan 30 Python
python将文本转换成图片输出的方法
Apr 28 Python
python实现给数组按片赋值的方法
Jul 28 Python
Pycharm学习教程(7)虚拟机VM的配置教程
May 04 Python
python中virtualenvwrapper安装与使用
May 20 Python
Python基于plotly模块实现的画图操作示例
Jan 23 Python
Python3.5局部变量与全局变量作用域实例分析
Apr 30 Python
使用python os模块复制文件到指定文件夹的方法
Aug 22 Python
python实现回旋矩阵方式(旋转矩阵)
Dec 04 Python
浅谈优化Django ORM中的性能问题
Jul 09 Python
Python接收手机短信的代码整理
Aug 02 Python
一小时学会TensorFlow2之基本操作2实例代码
Sep 04 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
解析百度搜索结果link?url=参数分析 (全)
2012/10/09 PHP
根据中文裁减字符串函数的php代码
2013/12/03 PHP
php目录操作实例代码
2014/02/21 PHP
php采用curl实现伪造IP来源的方法
2014/11/21 PHP
PHP截取指定图片大小的方法
2014/12/10 PHP
Cookie 注入是怎样产生的
2009/04/08 Javascript
JavaScript 弹出窗体点击按钮返回选择数据的实现
2010/04/01 Javascript
jQuery下扩展插件和拓展函数的写法(匿名函数使用的典型例子)
2010/10/20 Javascript
jquery获取特定name所有选中的checkbox,支持IE9标准模式
2013/03/18 Javascript
JavaScript动态插入script的基本思路及实现函数
2013/11/11 Javascript
JQuery节点元素属性操作方法
2015/06/11 Javascript
jQuery计算文本框字数及限制文本框字数的方法
2016/03/01 Javascript
jQuery使用$获取对象后检查该对象是否存在的实现方法
2016/09/04 Javascript
vue 组件中slot插口的具体用法
2018/04/03 Javascript
微信小程序性能优化之checkSession的使用
2019/03/06 Javascript
Vue 指令实现按钮级别权限管理功能
2019/04/23 Javascript
python 解析html之BeautifulSoup
2009/07/07 Python
Python数据类型详解(四)字典:dict
2016/05/12 Python
机器学习python实战之手写数字识别
2017/11/01 Python
python 日志增量抓取实现方法
2018/04/28 Python
python解决js文件utf-8编码乱码问题(推荐)
2018/05/02 Python
python内置函数sorted()用法深入分析
2019/10/08 Python
keras实现多种分类网络的方式
2020/06/11 Python
HTML5是什么 HTML5是什么意思 HTML5简介
2012/10/26 HTML / CSS
ReVive利维肤美国官网:RéVive Skincare
2018/04/18 全球购物
施华洛世奇加拿大官网:SWAROVSKI加拿大
2018/06/03 全球购物
Java如何读取CLOB字段
2013/10/10 面试题
党支部书记岗位责任制
2014/02/11 职场文书
手工社团活动方案
2014/02/17 职场文书
幼儿园评语大全
2014/04/17 职场文书
大学班级文化建设方案
2014/05/06 职场文书
制冷与空调专业毕业生推荐信
2014/07/07 职场文书
2014年入党积极分子学习三中全会思想汇报
2014/09/13 职场文书
黄山导游词
2015/01/31 职场文书
我是特种兵观后感
2015/06/11 职场文书
环保守法证明
2015/06/24 职场文书