티스토리 뷰
요약
URL에서 도메인, 서브도메인을 가져올 때 패턴화하기 어려운 부분은 public suffix list 기반인 tldextract를 사용하자!
내용
URL을 파싱하는 것은 손이 많이 가는 일이다.
특히 그 중에서도 도메인, 서브도메인과 관련되면 더더욱 고려할게 많아진다.
만약에 URL이 주어지고, 그의 도메인을 파악해야하는 상황이라고 가정해보자.
maps.naver.com, docs.github.com 를 예로 들어보자면, 당연히 도메인이 naver, github임을 파악할 수 있다.
하지만 이들을 직접 구현해야 하는 상황이라면 약간 복잡해진다.
대부분의 URL 라이브러리들은 간단한 것들(도메인 + path 형태) 를 정확하게 찾는다. (furl 의 host라던가 urllib라던가)
혹은 약간 귀찮지만 직접 파싱해주면 된다.
이들이 도메인을 가져오는 방법은 당연히 패턴이 있으니까 그에 대해 자동화할 수 있는 것이다.
따라서, 일부의 경우에는 잘 가져오지 못하는데, 이때 tldextract 를 사용하면 쉽게 해결할 수 있다.
우선 아래의 코드를 실행해보자.(furl, tldextract 설치 필요)
한번 공식 문서에서 자세한 설명을 읽어보자.
tldextract
Accurately separate the TLD from the registered domain and subdomains of a URL, using the Public Suffix List. By default, this includes the public ICANN TLDs and their exceptions. You can optionally support the Public Suffix List's private domains as well.
pypi.org
Accurately separate the TLD from the registered domain and subdomains of a URL, using the Public Suffix List. By default, this includes the public ICANN TLDs and their exceptions. You can optionally support the Public Suffix List's private domains as well.
요약하자면 public suffix listd에 등록된 domain, subdomain을 불러와서 URL의 TLD를 정확하게 분리한다는 것이다.
참고로 이때 TLD는 Top-Level-Domain을 의미한다.
url에서 도메인,서브도메인을 파싱하는건 번거롭기 때문에 이 방법으로 도메인, 서브도메인, suffix를 깔끔하게 가져가자
로깅 관련 문제
다만 그대로 사용하면 로깅에서 문제가 생긴다.
나의 경우, 로깅에서 레벨을 INFO로 설정해두고 사용하고 있었는데, 이 경우 tldextract의 filelock 모듈의 로그와 겹친다.
그렇다고 내가 기본적으로 사용하는 로깅의 레벨을 바꾸는건 주객전도라서 기분이 나쁘다.
그래서 구글링을 하던 도중에 이걸 발견했다.
https://github.com/benediktschmitt/py-filelock/issues/59
[Request] Add option to disable logger · Issue #59 · benediktschmitt/py-filelock
By default this package will always print to a logger, but for my use case it only ends up cluttering the logs with "released, acquired, released, acquired, etc". I'd appreciate it if...
github.com
요약하자면 다음을 (본인의 로깅 모듈에) 추가하면 된다.
기타
크롤러를 만들면서 dfs로 돌다가 도메인을 벗어나지 않도록 예외처리를 해주는 부분을 구현하다가 막혔었다.
기존에 furl host를 사용해서 구했을 때는 분명히 같은 도메인인데도 잘 구하질 못했었다. 도메인 인식을 못함
그래서 이를 처리할 방법을 찾다가 tldextract를 찾았다.
'연습' 카테고리의 다른 글
내맘대로 정리한 데이터 조회 공격: Blind Based (0) | 2021.05.14 |
---|---|
내맘대로 정리한 데이터 조회 공격 : Union Based (0) | 2021.05.13 |
docker logs (0) | 2021.05.06 |
[selenium] WebDriverWait (2) | 2021.05.04 |
[Python] 파이썬 코테 연습1 (1) | 2021.02.13 |
- Total
- Today
- Yesterday
- SQL
- 우선순위큐
- endl을절대쓰지마
- SSL
- 백준
- Python
- Til
- 힙
- 그리디
- vscode
- django test
- 프로그래머스
- 위상정렬
- 최대한 간략화하기
- 이것도모르면바보
- Remote
- Event Sourcing
- cipher suite
- django testcase
- 스택
- 파이썬
- 불필요한 값 무시하기
- requests
- 코딩테스트
- factory_pattern
- jwt
- BOJ
- 삽질
- docker-compose update
- Javascript
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |