Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 URL 처리 모듈 urllib 완벽 정리

파이썬은 웹 프로그래밍 분야에서 널리 사용되는 언어입니다. 우리가 웹사이트를 방문할 때 사용하는 웹 주소를 URL(Uniform Resource Locator, 통합 자원 식별자)이라고 부릅니다. 파이썬은 기본적으로 URL 호출을 처리하고, 해당 URL에 접속한 결과로 받아온 데이터를 다룰 수 있는 내장 도구들을 제공합니다.

이 글에서는 그중에서도 urllib 모듈을 살펴보겠습니다. 이 모듈에 포함된 다양한 함수들이 어떻게 URL로부터 결과를 가져오는 데 활용되는지 하나씩 알아보겠습니다.

urllib 설치하기

파이썬 환경에 urllib를 설치하려면 pip를 이용해 아래 명령어를 실행합니다.

pip install urllib

URL 열기

request.urlopen 메서드를 사용하면 특정 URL에 접속하여 그 내용을 파이썬 환경으로 가져올 수 있습니다.

예제

import urllib.request
address = urllib.request.urlopen('https://www.tutorialspoint.com/')
print(address.read())

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

b'<!DOCTYPE html>\r\n<!--[if IE 8]><html class="ie ie8"> <![endif]-->\r\n<!--[if IE 9]><html class……..
……………
……………….
new Date());\r\ngtag(\'config\', \'UA-232293-6\');\r\n</script>\r\n</body>\r\n</html>\n'

출력 결과를 보면 해당 웹페이지의 HTML 소스 코드 전체가 바이트(bytes) 형태로 읽혀진 것을 확인할 수 있습니다.

urllib.parse로 쿼리 문자열 전송하기

urllib.parse를 활용하면 URL이 유효한지 검증할 수 있을 뿐만 아니라, 검색 조건으로 쿼리 문자열(query string)을 함께 전달할 수도 있습니다. 서버로부터 받은 응답의 유효성을 확인한 뒤, 유효한 경우 전체 응답 내용을 출력하는 방식입니다.

예제

import urllib.request
import urllib.parse
url='https://tutorialspoint.com'
values= {'q':'python'}
data = urllib.parse.urlencode(values)
data = data.encode('utf-8') # 데이터는 반드시 bytes 형태여야 합니다
print(data)
req = urllib.request.Request(url, data)
resp = urllib.request.urlopen(req)
print(resp)
respData = resp.read()
print(respData)

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

b'q=python'
<http.client.HTTPResponse object at 0x00000195BF706850>
b'<!DOCTYPE html>\r\n<!--[if IE 8]><html class="ie ie8"> <![endif]…………
…………………
\r\n</script>\r\n</body>\r\n</html>\n'

여기서 핵심은 urlencode() 함수입니다. 딕셔너리 형태의 값을 q=python처럼 URL 인코딩된 쿼리 문자열로 변환해 주며, 요청 시에는 반드시 UTF-8로 인코딩하여 bytes 타입으로 변환해야 한다는 점에 유의하세요.

urllib.parse.urlsplit으로 URL 분석하기

urlsplit 함수는 URL을 입력받아 여러 구성 요소로 분리해 주므로, 이후 데이터 처리 작업에 유용하게 활용할 수 있습니다. 예를 들어, 프로그램적으로 어떤 URL이 SSL 인증(https)을 사용하는지 판단하고 싶다면 urlsplit으로 스킴(scheme) 값을 추출하여 확인하면 됩니다.

예제

import urllib.parse
url='https://tutorialspoint.com/python'
value = urllib.parse.urlsplit(url)
print(value)

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

SplitResult(scheme='https', netloc='tutorialspoint.com', path='/python', query='', fragment='')

결과를 보면 URL이 스킴(scheme), 네트워크 위치(netloc), 경로(path), 쿼리(query), 프래그먼트(fragment)의 다섯 가지 요소로 깔끔하게 분리되었음을 알 수 있습니다. 이렇게 분리된 값들은 각각 개별적으로 접근하여 원하는 로직에 활용할 수 있습니다.