[Python]從url中解析網域名稱的幾種方法,pythonurl
Python從url中解析網域名稱的幾種方法
從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 refrom urlparse import urlparsetopHostPostfix = ( '.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 "--"*40for 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.me1000chi.comsee.xidian.edu.cnpython.orggoogle.com.hkunkonwmongodb.orgpython.org127.0.0.1:8000
基本可以接受
urllib來解析網域名稱
import urllibprint "--"*40for url in urls: proto, rest = urllib.splittype(url) res, rest = urllib.splithost(rest) print "unkonw" if not res else res
運行結果如下:
meiwen.me1000chi.comsee.xidian.edu.cndocs.python.orgwww.google.com.hkunkonwapi.mongodb.orgpypi.python.org127.0.0.1:8000
會把www.也帶上,還需要進一步解析才可以
使用第三方模組 tld
from tld import get_tldprint "--"*40for url in urls: try: print get_tld(url) except Exception as e: print "unkonw"
運行結果:
meiwen.me1000chi.comxidian.edu.cnpython.orggoogle.com.hkunkonwmongodb.orgpython.orgunkonw
結果都可以接受
其他可以使用的解析模組:
- tld
- tldextract
- publicsuffix
本文出自 “orangleliu筆記本” 部落格,請務必保留此出處http://blog.csdn.net/orangleliu/article/details/39545821
怎解析url的主網域名稱
URL裡第一個出現尾碼(如COM、CN、ORG、NET等)的一段地址,首碼改WWW或WAP就是主網地址,例如wapiknow.baidu.com/...09&qid這段地址裡,wapiknow.baidu.com是次級網域名稱,把baidu前的wapiknow改為WAP或者WWW就是百度的手機或電腦上的主域
網域名稱轉寄隱藏、URL解析問題?
到 網域名稱自助解析平台
開啟DNS記錄
直接在網域名稱設定裡URL轉寄,然後隱藏原地址!
URL (URL轉寄)
主機名稱 TTL 方式 URL地址
方式: 0表示隱藏轉寄,1表示不隱藏轉寄