[PYTHON] URL에서 최상위 도메인 이름 (TLD)을 추출하는 방법
PYTHONURL에서 최상위 도메인 이름 (TLD)을 추출하는 방법
하위 도메인을 제외한 URL에서 도메인 이름을 추출하는 방법은 무엇입니까?
나의 초기 단순한 시도는 다음과 같다.
'.'.join(urlparse.urlparse(url).netloc.split('.')[-2:])
이것은 http://www.foo.com에서는 작동하지만 http://www.foo.com.au에서는 작동하지 않습니다. 유효한 TLD (최상위 도메인) 또는 국가 코드 (변경되기 때문에)에 대한 특별한 지식을 사용하지 않고도이를 올바르게 수행 할 수있는 방법이 있습니까?
감사
해결법
-
==============================
1.아니요, zap.co.uk은 하위 도메인이므로 (예 : 이탈리아의 등록 기관은 co.it과 같은 도메인을 판매하기 때문에) zap.co.uk은 그렇지 않습니다 (영국의 등록 기관 co.uk과 같은 도메인은 판매하지 않지만 zap.co.uk와 같은 도메인 만 판매합니다.)
아니요, zap.co.uk은 하위 도메인이므로 (예 : 이탈리아의 등록 기관은 co.it과 같은 도메인을 판매하기 때문에) zap.co.uk은 그렇지 않습니다 (영국의 등록 기관 co.uk과 같은 도메인은 판매하지 않지만 zap.co.uk와 같은 도메인 만 판매합니다.)
보조 테이블 (또는 온라인 소스)을 사용하여 영국 및 호주와 같이 특이한 행동을하는 TLD를 알려야합니다. 그런 의미 론적 지식없이 문자열을 쳐다 보지 못하게 할 수는 없습니다. 결국 변경되지만 소스가 그에 따라 적절하게 변경 될 수있는 좋은 온라인 소스를 찾을 수 있다면 희망적입니다. -).
-
==============================
2.다음은이 질문을보고이 문제를 해결하기 위해 작성한 훌륭한 파이썬 모듈입니다. https://github.com/john-kurkowski/tldextract
다음은이 질문을보고이 문제를 해결하기 위해 작성한 훌륭한 파이썬 모듈입니다. https://github.com/john-kurkowski/tldextract
이 모듈은 Mozilla 자원 봉사자가 관리하는 Public Suffix List에서 TLD를 찾습니다.
인용문:
-
==============================
3.Mozilla 웹 사이트에서 다른 누군가가 찾은 효과적인 tld 파일을 사용하십시오.
Mozilla 웹 사이트에서 다른 누군가가 찾은 효과적인 tld 파일을 사용하십시오.
from __future__ import with_statement from urlparse import urlparse # load tlds, ignore comments and empty lines: with open("effective_tld_names.dat.txt") as tld_file: tlds = [line.strip() for line in tld_file if line[0] not in "/\n"] def get_domain(url, tlds): url_elements = urlparse(url)[1].split('.') # url_elements = ["abcde","co","uk"] for i in range(-len(url_elements), 0): last_i_elements = url_elements[i:] # i=-3: ["abcde","co","uk"] # i=-2: ["co","uk"] # i=-1: ["uk"] etc candidate = ".".join(last_i_elements) # abcde.co.uk, co.uk, uk wildcard_candidate = ".".join(["*"] + last_i_elements[1:]) # *.co.uk, *.uk, * exception_candidate = "!" + candidate # match tlds: if (exception_candidate in tlds): return ".".join(url_elements[i:]) if (candidate in tlds or wildcard_candidate in tlds): return ".".join(url_elements[i-1:]) # returns "abcde.co.uk" raise ValueError("Domain not in global list of TLDs") print get_domain("http://abcde.co.uk", tlds)
결과 :
abcde.co.uk
만약 누군가 위의 어떤 부분을 더 파이썬적인 방법으로 다시 쓸 수 있는지 알려 주시면 감사하겠습니다. 예를 들어, last_i_elements리스트를 반복하는 더 좋은 방법이 있어야하지만, 나는 그것을 생각할 수 없다. ValueError가 가장 좋은 것인지는 알지 못합니다. 코멘트?
-
==============================
4.파이썬 tld 사용하기
파이썬 tld 사용하기
https://pypi.python.org/pypi/tld
pip install tld
from tld import get_tld print get_tld("http://www.google.co.uk")
또는 프로토콜없이
from tld import get_tld get_tld("www.google.co.uk", fix_protocol=True)
from tld import get_tld res = get_tld("http://some.subdomain.google.co.uk", as_object=True) res # 'co.uk' res.subdomain # 'some.subdomain' res.domain # 'google' res.tld # 'co.uk' res.fld # 'google.co.uk' res.parsed_url # SplitResult( # scheme='http', # netloc='some.subdomain.google.co.uk', # path='', # query='', # fragment='' # )
from tld import get_fld get_fld("http://www.google.co.uk") # 'google.co.uk'
-
==============================
5.많은 TLD가 있습니다. 다음은 그 목록입니다.
많은 TLD가 있습니다. 다음은 그 목록입니다.
http://data.iana.org/TLD/tlds-alpha-by-domain.txt
다른 목록이 있습니다.
http://en.wikipedia.org/wiki/List_of_Internet_top-level_domains
다른 목록이 있습니다.
http://www.iana.org/domains/root/db/
-
==============================
6.내가 처리하는 방법은 다음과 같습니다.
내가 처리하는 방법은 다음과 같습니다.
if not url.startswith('http'): url = 'http://'+url website = urlparse.urlparse(url)[1] domain = ('.').join(website.split('.')[-2:]) match = re.search(r'((www\.)?([A-Z0-9.-]+\.[A-Z]{2,4}))', domain, re.I) if not match: sys.exit(2) elif not match.group(0): sys.exit(2)
-
==============================
7.get_tld가 모든 새로운 것에 대해 업데이트 될 때까지, 나는 오류로부터 tld를 가져온다. 물론 그것은 나쁜 코드이지만 작동합니다.
get_tld가 모든 새로운 것에 대해 업데이트 될 때까지, 나는 오류로부터 tld를 가져온다. 물론 그것은 나쁜 코드이지만 작동합니다.
def get_tld(): try: return get_tld(self.content_url) except Exception, e: re_domain = re.compile("Domain ([^ ]+) didn't match any existing TLD name!"); matchObj = re_domain.findall(str(e)) if matchObj: for m in matchObj: return m raise e
from https://stackoverflow.com/questions/1066933/how-to-extract-top-level-domain-name-tld-from-url by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] C ++에서 호출 할 파이썬에서 C ++ 클래스를 구현하려면 어떻게해야합니까? (0) | 2018.10.03 |
---|---|
[PYTHON] 파이썬 판다 데이터 프레임 사전 (0) | 2018.10.03 |
[PYTHON] 파이썬 / 팬더가 저장된 csv에서 색인을 생성하는 것을 피하는 방법? (0) | 2018.10.03 |
[PYTHON] 파이썬 해시 가능 딕테이션 (0) | 2018.10.03 |
[PYTHON] virtualenv 또는 buildout을 사용하여 PIL을 설치하는 경우의 문제점 (0) | 2018.10.03 |