Python實現(xiàn)從url中提取域名的幾種方法
從url中找到域名,首先想到的是用正則,然后尋找相應(yīng)的類庫。用正則解析有很多不完備的地方,url中有域名,域名后綴一直在不斷增加等。通過google查到幾種方法,一種是用Python中自帶的模塊和正則相結(jié)合來解析域名,另一種是使第三方用寫好的解析模塊直接解析出域名。
要解析的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
運行結(jié)果如下:
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
運行結(jié)果如下:
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.也帶上,還需要進(jìn)一步解析才可以
使用第三方模塊 tld
from tld import get_tld
print "--"*40
for url in urls:
try:
print get_tld(url)
except Exception as e:
print "unkonw"
運行結(jié)果:
meiwen.me
1000chi.com
xidian.edu.cn
python.org
google.com.hk
unkonw
mongodb.org
python.org
unkonw
結(jié)果都可以接受
其他可以使用的解析模塊:
tld
tldextract
publicsuffix
相關(guān)文章
Python?的矩陣傳播機(jī)制Broadcasting和矩陣運算
這篇文章主要介紹了Python?的矩陣傳播機(jī)制Broadcasting和矩陣運算,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-06-06使用python如何提取JSON數(shù)據(jù)指定內(nèi)容
這篇文章主要介紹了使用python如何提取JSON數(shù)據(jù)指定內(nèi)容,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07Python基礎(chǔ)學(xué)習(xí)之奇異的GUI對話框
今天跨進(jìn)了GUI編程的園地,才發(fā)現(xiàn)python語言是這么的好玩,文中對GUI對話框作了非常詳細(xì)的介紹,對正在學(xué)習(xí)python的小伙伴們有很好的幫助,需要的朋友可以參考下2021-05-05python和anaconda區(qū)別以及先后安裝的問題詳解
Anaconda(開源的Python包管理器)是一個python發(fā)行版,包含了conda、Python等180多個科學(xué)包及其依賴項,下面這篇文章主要給大家介紹了關(guān)于python和anaconda區(qū)別以及先后安裝問題的相關(guān)資料,需要的朋友可以參考下2022-05-05使用Python的Treq on Twisted來進(jìn)行HTTP壓力測試
這篇文章主要介紹了使用Python的Treq on Twisted來進(jìn)行HTTP壓力測試,基于Python中的Twisted框架,需要的朋友可以參考下2015-04-04python機(jī)器學(xué)習(xí)基礎(chǔ)K近鄰算法詳解KNN
這篇文章主要為大家介紹了python機(jī)器學(xué)習(xí)基礎(chǔ)K近鄰算法詳解有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2021-11-11