파이썬 - URL 처리

안녕하세요, 꿈나무 프로그래머 여러분! 오늘 우리는 파이썬에서 URL 처리의 매력적인 세계로 뛰어들어 보겠습니다. 여러분의 친절한 이웃 컴퓨터 과학 교사로서, 저는 이 여정을 안내해 드리는 것을 기쁘게 생각합니다. 믿으세요, 이 튜토리얼이 끝나면 여러분은 프로처럼 URL을 다루게 될 것입니다!

Python - URL Processing

urllib.parse 모듈

먼저 기본적인 내용부터 시작해보겠습니다. urllib.parse 모듈은 URL을 처리하는 데 유용한 도구들로 가득 찬 스위스 아ーノ이刀와 같습니다.

URL 파싱

가장 흔한 작업 중 하나는 URL을 구성 요소로 분해하는 것입니다. 다음은 그 방법입니다:

from urllib.parse import urlparse

url = "https://www.example.com:8080/path/to/page?key1=value1&key2=value2#section"
parsed_url = urlparse(url)

print(parsed_url.scheme)    # https
print(parsed_url.netloc)    # www.example.com:8080
print(parsed_url.path)      # /path/to/page
print(parsed_url.query)     # key1=value1&key2=value2
print(parsed_url.fragment)  # section

이 예제에서 urlparse()는 우리의 URL을 구성 요소로 분해합니다. 생물학 수업에서 개구리를 해부하는 것과 비슷하지만, 훨씬 더 지저분하지 않습니다!

URL 결합

때로는 URL을 부분으로 만들어야 합니다. urljoin() 함수는 이에 완벽하게 적합합니다:

from urllib.parse import urljoin

base_url = "https://www.example.com/path/"
relative_url = "subpage.html"
full_url = urljoin(base_url, relative_url)

print(full_url)  # https://www.example.com/path/subpage.html

urljoin()는 레고 마스터처럼 URL 조각들을 능숙하게 조립하는 것을 상상해 보세요!

urllib.request 모듈

이제 URL을 파싱할 수 있으므로, 실제로 웹 페이지를 가져오는 방법을 배워보겠습니다. urllib.request 모듈은 우리를 만리동화 세계로 데려다주는 티켓입니다!

웹 페이지 가져오기

다음은 웹 페이지를 다운로드하는 간단한 예제입니다:

import urllib.request

url = "https://www.example.com"
response = urllib.request.urlopen(url)
html = response.read().decode('utf-8')

print(html[:100])  # HTML의 첫 100자 출력

이 코드는 도서관에 있는 책을 가져오는 로봇을 보내는 것과 같습니다. urlopen() 함수는 우리의 로봇이고, HTML 콘텐츠는 책입니다!

HTTP 오류 처리

모든 요청이 원활하게 되는 것은 아닙니다. 가끔 웹사이트가 다운되거나, 접근 권한이 없을 수 있습니다. 이러한 상황을 어떻게 처리하는지 보겠습니다:

import urllib.request
import urllib.error

try:
url = "https://www.nonexistentwebsite123456789.com"
response = urllib.request.urlopen(url)
except urllib.error.HTTPError as e:
print(f"HTTP 오류 {e.code}: {e.reason}")
except urllib.error.URLError as e:
print(f"URL 오류: {e.reason}")

이 코드는 우리의 로봇이 책을 찾지 못하거나 도서관에 출입이 허용되지 않는 상황을 예절 있게 처리하는 것과 같습니다.

요청 객체

occasionally, we need more control over our HTTP requests. That's where the Request object comes in handy.

커스텀 요청 생성

헤더를 포함한 커스텀 요청을 만들어 보겠습니다:

import urllib.request

url = "https://www.example.com"
headers = {'User-Agent': 'MyApp/1.0'}
req = urllib.request.Request(url, headers=headers)
response = urllib.request.urlopen(req)

print(response.headers)

이것은 우리의 로봇을 특정 가면(유저 에이전트 헤더)으로 보내 도서관을 방문하는 것과 같습니다. 이는 웹사이트가 방문자를 이해하는 데 도움이 됩니다.

urllib.error 모듈

이미 오류 처리의 일부를 보았지만, urllib.error 모듈에 대해 더 깊이 탐구해보겠습니다.

일반 오류 유형

다음은 만날 수 있는 일반적인 오류 유형의 표입니다:

오류 유형 설명
HTTPError 서버가 비성공적인 상태 코드를 반환할 때 발생
URLError 서버에 접근할 때 문제가 발생할 때 발생

이를 실제로 적용해 보겠습니다:

import urllib.request
import urllib.error

def fetch_url(url):
try:
response = urllib.request.urlopen(url)
return response.read().decode('utf-8')
except urllib.error.HTTPError as e:
print(f"HTTP 오류 {e.code}: {e.reason}")
except urllib.error.URLError as e:
print(f"URL 오류: {e.reason}")
return None

# 다양한 URL로 테스트
print(fetch_url("https://www.example.com"))
print(fetch_url("https://www.example.com/nonexistent"))
print(fetch_url("https://www.nonexistentwebsite123456789.com"))

이 함수는 책을 가져오는 로봇뿐만 아니라, 길을 떠나면서 겪은 문제를 예절 있게 설명하는 잘 훈련된 로봇과 같습니다.

그렇습니다, 친구들! 우리는 파이썬의 URL 처리 세계를 여행했습니다. 연습이 완벽을 만든다는 것을 기억하세요. 이 예제를 시도하고, 그것을 실험해 보세요. 그러면 얼마 지나지 않아 여러분은 잠들 때까지 URL을 처리할 수 있을 것입니다 (하지만 잠들 때 코딩은 추천드리지 않습니다)!

행복한 코딩 되세요, 여러분의 URL이 항상 해결되길 바랍니다!

Credits: Image by storyset