[PYTHON] URL에서 호스트 이름 변경하기
PYTHONURL에서 호스트 이름 변경하기
나는 호스트 이름을 변경하기 위해 파이썬을 사용하려고 노력하고 있으며, 만족스러운 해결책을 찾지 못한 채 잠시 동안 urlparse 모듈로 놀고있다. 예를 들어 URL을 고려해보십시오.
https://www.google.dk:80/barbaz
'www.google.dk'를 예 : "www.foo.dk", 그래서 나는 다음과 같은 URL을 얻는다 :
https://www.foo.dk:80/barbaz.
따라서 대체 할 부분은 urlparse.urlsplit이 호스트 이름을 참조하는 부분입니다. urlsplit의 결과로 인해 변경이 가능하지만 결과로 생성되는 ParseResult 형식이 나를 허용하지 않기를 바랬습니다. 아무것도 할 수 없다면 물론 모든 부분을 +와 함께 추가하여 새 URL을 다시 작성할 수는 있지만 올바른 장소에 ": //"및 ":"을 가져 오는 많은 조건이있는 꽤 추악한 코드를 남겨 둡니다. .
해결법
-
==============================
1.urlparse.urlparse 함수와 ParseResult._replace 메소드를 사용할 수 있습니다.
urlparse.urlparse 함수와 ParseResult._replace 메소드를 사용할 수 있습니다.
>>> import urlparse >>> parsed = urlparse.urlparse("https://www.google.dk:80/barbaz") >>> replaced = parsed._replace(netloc="www.foo.dk:80") >>> print replaced ParseResult(scheme='https', netloc='www.foo.dk:80', path='/barbaz', params='', query='', fragment='')
ParseResult는 namedtuple의 서브 클래스이고 _replace는 다음과 같은 namedtuple 메소드입니다.
최신 정보:
의견에서 @ 2rs2ts는 netloc 속성에 포트 번호가 포함되어 있다고 말했습니다.
좋은 소식 : ParseResult에는 호스트 이름과 포트 속성이 있습니다. 나쁜 소식 : hostname과 port는 namedtuple의 멤버가 아니며 동적 속성이므로 parsed._replace (hostname = "www.foo.dk")를 수행 할 수 없습니다. 그것은 예외를 던질 것이다.
분할하지 않으려는 경우 : 귀하의 URL에 항상 포트 번호가 있으며 사용자 이름과 비밀번호가 없습니다 (즉, "https : // 사용자 이름 : password@www.google.dk : 80 / barbaz"와 같은 URL입니다). 넌 할 수있어:
parsed._replace(netloc="{}:{}".format(parsed.hostname, parsed.port))
-
==============================
2.파이썬의 urlparse에서 urlsplit과 urlunsplit을 활용할 수 있습니다 :
파이썬의 urlparse에서 urlsplit과 urlunsplit을 활용할 수 있습니다 :
>>> from urlparse import urlsplit, urlunsplit >>> url = list(urlsplit('https://www.google.dk:80/barbaz')) >>> url ['https', 'www.google.dk:80', '/barbaz', '', ''] >>> url[1] = 'www.foo.dk:80' >>> new_url = urlunsplit(url) >>> new_url 'https://www.foo.dk:80/barbaz'
docs 상태에서 urlunsplit ()에 전달 된 인수는 "5 개 항목으로 반복 가능"할 수 있으므로 위 코드는 예상대로 작동합니다.
-
==============================
3.urlparse 모듈의 urlparse 및 urlunparse 메소드 사용 :
urlparse 모듈의 urlparse 및 urlunparse 메소드 사용 :
import urlparse old_url = 'https://www.google.dk:80/barbaz' url_lst = list(urlparse.urlparse(old_url)) # Now url_lst is ['https', 'www.google.dk:80', '/barbaz', '', '', ''] url_lst[1] = 'www.foo.dk:80' # Now url_lst is ['https', 'www.foo.dk:80', '/barbaz', '', '', ''] new_url = urlparse.urlunparse(url_lst) print(old_url) print(new_url)
산출:
https://www.google.dk:80/barbaz https://www.foo.dk:80/barbaz
-
==============================
4.netloc에서 호스트의 간단한 문자열 대체는 대부분의 경우에도 작동합니다.
netloc에서 호스트의 간단한 문자열 대체는 대부분의 경우에도 작동합니다.
>>> p = urlparse.urlparse('https://www.google.dk:80/barbaz') >>> p._replace(netloc=p.netloc.replace(p.hostname, 'www.foo.dk')).geturl() 'https://www.foo.dk:80/barbaz'
어떤 경우에 사용자 이름이나 암호가 호스트 이름과 일치 할 경우에는 작동하지 않습니다. 마지막 발생 만 바꾸기 위해 str.replace를 제한 할 수 없으므로 대신 split 및 join을 사용할 수 있습니다.
>>> p = urlparse.urlparse('https://www.google.dk:www.google.dk@www.google.dk:80/barbaz') >>> new_netloc = 'www.foo.dk'.join(p.netloc.rsplit(p.hostname, 1)) >>> p._replace(netloc=new_netloc).geturl() 'https://www.google.dk:www.google.dk@www.foo.dk:80/barbaz'
-
==============================
5.나는 또한 @ linkyndy의 대답처럼 urlsplit과 urlunsplit을 사용하는 것을 권하고 싶지만, Python3의 경우에는 다음과 같다.
나는 또한 @ linkyndy의 대답처럼 urlsplit과 urlunsplit을 사용하는 것을 권하고 싶지만, Python3의 경우에는 다음과 같다.
>>> from urllib.parse import urlsplit, urlunsplit >>> url = list(urlsplit('https://www.google.dk:80/barbaz')) >>> url ['https', 'www.google.dk:80', '/barbaz', '', ''] >>> url[1] = 'www.foo.dk:80' >>> new_url = urlunsplit(url) >>> new_url 'https://www.foo.dk:80/barbaz'
-
==============================
6.사용중인 포트 (있는 경우)를 건드리지 않고 호스트를 바꾸려면 다음을 사용하십시오.
사용중인 포트 (있는 경우)를 건드리지 않고 호스트를 바꾸려면 다음을 사용하십시오.
import re, urlparse p = list(urlparse.urlsplit('https://www.google.dk:80/barbaz')) p[1] = re.sub('^[^:]*', 'www.foo.dk', p[1]) print urlparse.urlunsplit(p)
인쇄물
https://www.foo.dk:80/barbaz
포트를 제공하지 않으면 잘 작동합니다.
니겔 (Nigel)이 _replace 방식을 선호했다면 다음과 같이 대신 사용할 수 있습니다.
p = urlparse.urlsplit('https://www.google.dk:80/barbaz') p = p._replace(netloc=re.sub('^[^:]*', 'www.foo.dk', p.netloc)) print urlparse.urlunsplit(p)
from https://stackoverflow.com/questions/21628852/changing-hostname-in-a-url by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 목록 또는 단일 정수를 인수로 처리하십시오. (0) | 2018.11.20 |
---|---|
[PYTHON] 파일 이름을 file : // URL로 변환합니다. (0) | 2018.11.20 |
[PYTHON] csv를 Google 콜라에서 데이터 프레임으로 읽습니다. (0) | 2018.11.20 |
[PYTHON] Flask에 양식 배열 보내기 (0) | 2018.11.20 |
[PYTHON] 동일한 bool 값으로 목록 초기화 (0) | 2018.11.20 |