Python实现从url中提取域名的几种方法

作者:junjie 时间:2022-03-14 12:55:30 

从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,url,提取域名
0
投稿

猜你喜欢

  • Python脚本Selenium及页面Web元素定位详解

    2023-06-14 12:21:10
  • ajax(iframe)无刷新提交表单、上传文件

    2024-04-17 10:39:47
  • OpenCV图像处理之七种常用图像几何变换

    2022-01-27 03:11:51
  • 详解MySQL 重做日志(redo log)与回滚日志(undo logo)

    2024-01-29 13:51:01
  • ECMAScript6函数默认参数

    2024-05-13 09:18:24
  • PHP中非常有用却鲜有人知的函数集锦

    2023-11-24 14:29:47
  • python中numpy的矩阵、多维数组的用法

    2021-01-26 04:25:43
  • asp如何在读取Excel文件时创建列表的下拉菜单?

    2010-06-18 19:59:00
  • golang 中 channel 的详细使用、使用注意事项及死锁问题解析

    2024-04-26 17:26:45
  • 关于 文本框默认值 的操作js代码

    2024-04-18 09:28:39
  • vue iview的菜单组件Mune 点击不高亮的解决方案

    2024-06-07 15:20:08
  • 解析Tensorflow之MNIST的使用

    2021-09-06 03:34:27
  • python实现布隆过滤器及原理解析

    2023-03-11 15:01:20
  • tensorflow-gpu2.3版本安装步骤

    2022-11-25 09:35:40
  • SQL Server 2005数据库镜像配置脚本示例

    2008-04-12 14:49:00
  • Node.js中console.log()输出彩色字体的方法示例

    2024-05-02 17:37:54
  • 10个精致的导航菜单欣赏及点评

    2011-09-22 20:33:44
  • 一篇文章带你学习Python3的高级特性(1)

    2021-09-24 04:39:01
  • Python基于随机采样一至性实现拟合椭圆(优化版)

    2021-10-19 15:08:36
  • python调用外部程序的实操步骤

    2021-09-11 10:39:37
  • asp之家 网络编程 m.aspxhome.com