Python의 Urljoin 소개

Migel Hewage Nimesha 2023년12월11일
Python의 Urljoin 소개

이 튜토리얼은 Python urljoin과 이를 사용할 때의 동작을 설명합니다. 또한 다른 예제 코드를 사용하여 Python에서 urljoin을 사용하는 방법을 보여줍니다.

Python의 urljoin 소개

URL에는 일반적으로 웹 사이트, 참가자의 검색 또는 각 영역의 자료 배열을 평가할 때 활용할 수 있는 필수 정보가 포함됩니다.

때때로 URL이 매우 복잡해 보이더라도 Python은 URL을 구문 분석하고 조인하고 URL의 구성 요소를 검색할 수 있는 다양한 유용한 라이브러리와 함께 제공됩니다.

Python 3의 urllib 패키지를 사용하면 사용자가 스크립트 내에서 웹 사이트를 탐색할 수 있으며 urljoin()과 같은 URL 기능을 관리하기 위한 여러 모듈이 포함되어 있습니다.

urllib 라이브러리는 사용자가 Universal Resource Locator를 사용하여 웹 사이트를 방문하고 상호 작용할 수 있도록 하는 Python 프로그래밍에서 URL을 사용할 때 중요합니다.

또한 이 라이브러리는 urllib.request, urllib.error, urllib.parseurllib.robotparser와 같은 더 많은 패키지를 제공합니다.

urljoin() 메서드 사용

urljoin() 메서드는 많은 관련 URL이 필요한 경우에 유용합니다. 예를 들어 웹사이트에 대해 생성될 페이지 집합의 URL과 기본 URL에 새 값을 추가합니다.

통사론:

urljoin(baseurl, newurl, allowFrag=None)

기본 URL(baseurl)과 다른 URL(newurl)을 결합하여 전체 URL을 구성한 후 비공식적으로 기본 URL의 일부를 주소 지정 체계, 네트워크 위치 및 경로로 사용하여 누락된 부분을 제공합니다. 상대 URL.

예로서:

>>> from urllib.parse import urljoin
>>> urljoin('http://www.cwi.nl:50/%7Eguido/Python.html', 'FAQ.html')

출력:

'http://www.cwi.nl:50/%7Eguido/FAQ.html'

allowFrag 인수는 urlparse()와 동일한 의미 및 기본값으로 구성됩니다. newurl// 또는 scheme://로 시작하는 절대 URL인 경우 newurlhostname 및/또는 scheme이 출력에 표시됩니다. 예로서:

>>> from urllib.parse import urljoin
>>> urljoin('http://www.cwi.nl:50/%7Eguido/Python.html', '//www.python.org/%7Eguido')

출력:

'https://www.python.org/%7Eguido'

출력이 예외가 아닌 경우 urlsplit()urlunsplit()을 사용하여 newurl을 사전 처리하여 가능한 체계 및 네트워크 위치 부분을 분리합니다.

함수에 관심이 있는 경우 urlparse(), urlsplit()urlunsplit()의 기능이 아래에 간략하게 설명되어 있습니다.

  • urlparse() - 이 모듈을 사용하면 URL을 다른 부분으로 빠르게 분리하고 URL에서 특정 부분을 필터링할 수 있습니다.
  • urlsplit() - 이 모듈은 urlparse()의 대안이지만 URL에서 매개변수를 분할하지 않는다는 점에서 다릅니다. urlsplit() 모듈은 각 경로 세그먼트에 대한 매개변수를 지원하는 RFC 2396을 따르는 URL에 유용합니다.
  • urlunsplit() - 이 모듈의 기능은 urlsplit()에 의해 반환된 튜플의 요소를 결합하여 문자열로 완전한 URL을 형성하는 것입니다.

urljoin() 모듈을 사용하여 URL 구축

Python의 requests 모듈은 URL을 구축하고 URL 값을 동적으로 조작하는 데 도움을 줄 수 있습니다. 프로그래밍 방식으로 URL의 모든 하위 디렉터리를 가져온 다음 URL의 일부를 새 값으로 대체하여 새 URL을 만들 수 있습니다.

다음 코드 펜스는 urljoin()을 사용하여 URL 경로에서 다른 하위 폴더를 가져옵니다. urljoin()은 URL을 구축할 기본 URL에 새 값을 추가하는 데 사용됩니다.

from requests.compat import urljoin

base = "https://stackoverflow.com/questions/10893374"
print(urljoin(base, "."))
print(urljoin(base, ".."))
print(urljoin(base, "..."))
print(urljoin(base, "/10893374/"))

url_query = urljoin(base, "?vers=1.0")
print(url_query)
url_sec = urljoin(url_query, "#section-5.4")
print(url_sec)

출력:

https://stackoverflow.com/questions/
https://stackoverflow.com/
https://stackoverflow.com/questions/...
https://stackoverflow.com/10893374/
https://stackoverflow.com/questions/10893374?vers=1.0
https://stackoverflow.com/questions/10893374?vers=1.0#section-5.4

Python에서 URL을 분할하는 방법이 있습니까? 물론 예!

URL을 기본 주소 이외의 여러 구성 요소로 분할할 수 있습니다. URL에 첨부된 특정 쿼리 또는 태그에 사용되는 추가 매개변수는 다음과 같이 urlphase() 메서드를 사용하여 나뉩니다.

from requests.compat import urlparse

url_01 = (
    "https://docs.python.org/3/library/__main__.html?highlight=python%20hello%20world"
)
url_02 = "https://docs.python.org/2/py-modindex.html#cap-f"
print(urlparse(url_01))
print(urlparse(url_02))

출력:

ParseResult(scheme='https', netloc='docs.python.org', path='/3/library/__main__.html', params='', query='highlight=python%20hello%20world', fragment='')
ParseResult(scheme='https', netloc='docs.python.org', path='/2/py-modindex.html', params='', query='', fragment='cap-f')

urljoin()을 사용하여 URL 형성

urllib.parse에서 가져온 urljoin() 메서드의 동작을 이해하기 위한 여러 부분의 URL 구성을 아래 예제에서 보여주고 설명합니다.

예제 코드:

>>> from urllib.parse import urljoin
>>> urljoin('test', 'task')

출력:

'task'

예제 코드:

>>> from urllib.parse import urljoin
>>> urljoin('http://test', 'task')

출력:

'http://test/task'

예제 코드:

>>> from urllib.parse import urljoin
>>> urljoin('http://test/add', 'task')

출력:

'http://test/task'

예제 코드:

>>> from urllib.parse import urljoin
>>> urljoin('http://test/add/', 'task')

출력:

'http://test/add/task'

예제 코드:

>>> from urllib.parse import urljoin
>>> urljoin('http://test/add/', '/task')

출력:

'http://test/task'

예제 코드:

>>> from urllib.parse import urljoin
>>> urljoin('test', 'task')

출력:

'task'

위 스니펫에서 첫 번째 인수는 브라우저에 표시되는 페이지와 동일할 수 있는 baseurl(urljoin() 구문 가정)으로 간주될 수 있습니다.

두 번째 인수 newurl은 해당 페이지에서 앵커의 href로 간주할 수 있습니다. 결과적으로 최종 URL은 사용자가 클릭하면 페이지로 연결됩니다.

위의 스니펫을 고려할 때 baseurl에 체계와 도메인이 포함되어 있다고 생각할 수도 있습니다.

예제 코드:

>>> from urllib.parse import urljoin
>>> urljoin('http://test', 'task')

출력:

'http://test/task'

링크는 가상 호스팅 측면과 <a href='task'>Baz</a>와 같은 앵커를 고려할 때 위 스니펫의 URL로 사용자를 안내할 수 있습니다.

>>> from urllib.parse import urljoin
>>> urljoin('http://test/add', 'task')

출력:

'http://test/task'

위와 같이 test/add 부분을 추가하면 사용자를 위의 URL로 안내하는 task에 대한 상대 링크가 생성됩니다.

>>> from urllib.parse import urljoin
>>> urljoin('http://test/add/', 'task')

출력:

'http://test/add/task'

여기에 test/add/가 추가되어 다른 관련 링크인 test/add/task로 연결됩니다.

>>> from urllib.parse import urljoin
>>> urljoin('http://test/add/', '/task')

출력:

'http://test/task'

사용자가 test/add/에 있고 href/task인 경우 사용자를 test/task에 연결합니다. 따라서 Python의 urljoin()은 필요에 따라 URL을 해결하는 데 도움이 되는 편리한 함수라고 말할 수 있습니다.

Migel Hewage Nimesha avatar Migel Hewage Nimesha avatar

Nimesha is a Full-stack Software Engineer for more than five years, he loves technology, as technology has the power to solve our many problems within just a minute. He have been contributing to various projects over the last 5+ years and working with almost all the so-called 03 tiers(DB, M-Tier, and Client). Recently, he has started working with DevOps technologies such as Azure administration, Kubernetes, Terraform automation, and Bash scripting as well.