Python实现从url中提取域名的几种方法
admin
2023-07-31 02:12:32
0

从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

相关内容

热门资讯

500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
Prometheus+Graf... 一,Prometheus概述 1,什么是Prometheus?Prometheus是最初在Sound...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
python绘图库Matplo... 本文简单介绍了Python绘图库Matplotlib的安装,简介如下: matplotlib是pyt...