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升级提示Tkinter模块找不到的解决方法
Aug 22 Python
python实现根据月份和日期得到星座的方法
Mar 27 Python
Python3实现从指定路径查找文件的方法
May 22 Python
Python使用爬虫猜密码
Feb 19 Python
python 借助numpy保存数据为csv格式的实现方法
Jul 04 Python
Python用于学习重要算法的模块pygorithm实例浅析
Aug 16 Python
Python实现将多个空格换为一个空格.md的方法
Dec 20 Python
selenium+python自动化测试环境搭建步骤
Jun 03 Python
Python学习笔记之函数的定义和作用域实例详解
Aug 13 Python
解决python 3 urllib 没有 urlencode 属性的问题
Aug 22 Python
使用python爬取抖音app视频的实例代码
Dec 01 Python
单身狗福利?Python爬取某婚恋网征婚数据
Jun 03 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/10/09 PHP
坏狼php学习 计数器实例代码
2008/06/15 PHP
PHP使用静态方法的几个注意事项
2014/09/16 PHP
yii数据库的查询方法
2015/12/28 PHP
JavaScript中的History历史对象
2008/01/16 Javascript
javascript 三种编解码方式
2010/02/01 Javascript
ExtJS 学习专题(一) 如何应用ExtJS(附实例)
2010/03/11 Javascript
JQuery模板插件 jquery.tmpl 动态ajax扩展
2011/11/10 Javascript
JS对img进行操作(换图片/切图/轮换/停止)
2013/04/17 Javascript
使用js实现关闭js弹出层的窗口
2014/02/10 Javascript
javascript实现时间格式输出FormatDate函数
2015/01/13 Javascript
jQuery创建DOM元素实例解析
2015/01/19 Javascript
基于jquery实现复选框全选,反选,全不选等功能
2015/10/16 Javascript
Node.js操作Firebird数据库教程
2016/03/04 Javascript
自带气泡提示的vue校验插件(vue-verify-pop)
2017/04/07 Javascript
解决js相同的正则多次调用test()返回的值却不同的问题
2018/10/10 Javascript
用Fundebug插件记录网络请求异常的方法
2019/02/21 Javascript
vue结合el-upload实现腾讯云视频上传功能
2020/07/01 Javascript
如何利用JavaScript编写更好的条件语句详解
2020/08/10 Javascript
[51:28]EG vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/16 DOTA
使用Python抓取模板之家的CSS模板
2015/03/16 Python
python实现搜索本地文件信息写入文件的方法
2016/02/22 Python
python文件操作相关知识点总结整理
2016/02/22 Python
关于Python解包知识点总结
2020/05/05 Python
美国汽车轮胎和轮毂销售网站:Tire Rack
2018/01/11 全球购物
垃圾回收的优点和原理。并考虑2种回收机制
2016/10/16 面试题
职工运动会邀请函
2014/02/02 职场文书
团代会主持词
2014/04/02 职场文书
法制教育演讲稿
2014/09/10 职场文书
投标文件签署授权委托书范本
2014/10/12 职场文书
领导干部群众路线对照检查材料
2014/11/05 职场文书
2014全年工作总结
2014/11/27 职场文书
交心谈心活动总结
2015/05/11 职场文书
创业计划书之农家乐
2019/10/09 职场文书
Python机器学习之KNN近邻算法
2021/05/14 Python
利用JuiceFS使MySQL 备份验证性能提升 10 倍
2022/03/17 MySQL