Search

urllib

대분류
라이브러리
소분류
Python Module
유형
url
프로토콜
주요 레퍼런스
https://ctkim.tistory.com/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-urllib-%EB%AA%A8%EB%93%88
https://m.blog.naver.com/swimmingsdesign/223026993544
https://han-py.tistory.com/320
모듈 분류
내장
최종 편집 일시
2024/10/27 15:31
생성 일시
2024/07/22 01:06
13 more properties

설명

파이썬 URL 제어 모듈 HTTP, FTP, SMTP 등과 같은 프로토콜을 사용하여 URL을 열고 읽고 쓰는 기능을 제공
HTTP(HyperText Transfer Protocol) : 웹 상에서 문서, 이미지, 동영상 등 다양한 리소스를 전송하기 위한 프로토콜
FTP (File Transfer Protocol) : 컴퓨터 간에 파일을 송수신하기 위해 사용되며, 로컬과 원격 시스템 간의 파일 전송을 쉽게 가능
SMTP (Simple Mail Transfer Protocol) : 이메일 클라이언트와 메일 서버 간의 통신에 사용되며, 메일 서버에서 메일 서버로 메시지를 전달하는 프로토콜

메서드 → 객체

urllib.request

다양한 방식으로 URL을 열고 데이터를 가져오는 기능 제공
# 1번 from urllib.request import urlopen # urlopen 함수 호출 response = urlopen('http://www.google.co.kr') # 바로 문자열 대입 # 2번 from urllib.request import Request, urlopen # urlopen 함수, Request 클래스 호출 req = Request('http://www.google.co.kr') # Request 클래스를 사용하여 req 생성 response = urlopen(req) # urlopen 함수 사용 # 반환값 : 200
Python
복사

urllib.request.urlopen(’문자열’) → HTTPResponse 객체

urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)
Python
복사
URL을 열어서 HTTPResponse 객체를 반환하는 함수
HTTP, HTTPS, FTP 등의 프로토콜을 지원
받는 인자 : 열고자 하는 URL을 나타내는 문자열
from urllib.request import urlopen response = urlopen('http://www.google.co.kr') print(response) # 반환값 : <http.client.HTTPResponse at 0x25e63f57c18>
Python
복사

HTTPResponse 객체.read()

응답 본문을 가져올 수 있음.
웹 페이지 HTML 코드를 읽어옴.
... response.read().decode("utf-8") ''' 반환값 : '\n<!doctype html> <html lang="ko" data-dark="false"> <head> <meta charset="utf-8"> <title>NAVER</title> <meta http-equiv="X-UA-Compatib le" content="IE=edge"> <meta name="viewport" content="width=1190"> <meta nam e="apple-mobile-web-app-title" content="NAVER"/> <meta name="robots" content=" index,nofollow"/> <meta name="description" content="네이버 메인에서 다양한 정보 와 유용한 컨텐츠를 만나 보세요"/> <meta property="og:title" content="네이버"> <me ta property="og:url" content="https://www.naver.com/"> <meta property="og:imag e" content="https://s.pstatic.net/static/www/mobile/edit/2016/0705/mobile_2128 52414260.png"> <meta property="og:description" content="네이버 메인에서 다양한 정 보와 유용한 컨텐츠를 만나 보세요"/> <meta name="twitter:card" content="summary"> < meta name="twitter:title" content=""> <meta name="twitter:url" content="https:/ /www.naver.com/"> <meta name="twitter:image" content="https://s.pstatic.net/s tatic/www/mobile/edit/2016/.... '''
Python
복사

HTTPResponse 객체.status()

from urllib.request import urlopen response = urlopen('http://www.google.co.kr') response.status # 반환값 : 200
Python
복사

urllib.request.urlretrieve()

url이 가리키는 주소에 접근해서 해당 자원을 로컬 컴퓨터에 저장 가능.
해당 메서드를 이용하여 이미지를 저장하는 것이 가능
import urllib.request url = "--마우스우클릭으로 이미지 주소 복사한 내용--" savename = "./저장할이미지이름.jpg" # url이 가리키는 주소에 접근해서 해당 자원을 로컬 컴퓨터에 저장하기 urllib.request.urlretrieve(url, savename) print("저장완료!!!")
Python
복사
다운 받은 이미지 파일을 메모리에 저장한 후 open을 활용하여 파일로 저장
import urllib.request url = "--마우스우클릭으로 이미지 주소 복사한 내용--" savename = "./저장할이미지이름.jpg" image = urllib.request.urlopen(url).read() # wb는 Write Binary # text가 아닌 형태는 바이너리로 주어지기 때문에 "wb"를 사용 with open(savename, mode="wb") as f: #메모리의 이미지를 파일로 저장 f.write(image) print(저장완료!!)
Python
복사

urllib.error

url 접속 오류가 들어있는 객체
해당 url로 접속이 되지 않을 시 해당 에러를 예외처리하는 데 사용
from urllib.error import HTTPError from urllib.error import URLError # 만약 없는 URL를 작성했다면 URLError이 발생되고, # 사이트의 서버에서 접근을 막았다면 HTTPError가 발생 try: html = urlopen("https://java.com") except HTTPError as e: #네이버나 구글같은 곳에서 사이트를 막아놨을 경우 print("HTTP 에러입니다.") except URLError as e: #존재하지 않는 사이트의 경우 print("존재하지 않는 사이트입니다.") else: # 정상적으로 연결 시 print(html.read()) ''' 반환값 : java.com의 사이트를 불어온 출력값이 나타난다. '''
Python
복사

urllib.parse()

URL과 파라미터를 다루는 메소드
문자열 파싱을 자동으로 해줌.
from urllib import parse url = parse.urlparse("https://예시도메인/articles/2?test=hanpy&key=abcd") print (url) ''' ParseResult(scheme='https', netloc='예시도메인', path='/articles/2', params='', query='test=python&key=abcd', fragment='') ''' print(url.scheme) # 스키마 정보 print(url.netloc) # 네트워크 위치 정보 print(url.path) # 경로 정보 print(url.params) # 파라미터 정보 print(url.query) # 쿼리 정보 ''' 'test=python&key=abcd' ''' print(url.fragment) # 프래그먼트 정보
Python
복사

parse.parse_qs()

parse()의 반환 값을 딕셔너리 형태로 변경
쿼리 스트링을 더 쉽게 분석 가능
from urllib import parse url = parse.urlparse("https://예시도메인/articles/2?test=hanpy&key=abcd") print(parse.parse_qs(url.query)) ''' {'test': ['python'], 'key': ['abcd']} '''
Python
복사

parse.quote_plus(), parse.quote

인코딩 처리
문자열을 %이스케이프를 사용하는 문자열로 변환
quote_plus : 띄어쓰기를 +기호로 지환
quote : 띄어쓰기를 %20으로 지환
from urllib.parse import quote, quote_plus print('파이썬은 easy') print(quote('파이썬은 easy')) print(quote_plus('파이썬은 easy')) #output ''' 파이썬은 easy %ED%8C%8C%EC%9D%B4%EC%8D%AC%EC%9D%80%20easy %ED%8C%8C%EC%9D%B4%EC%8D%AC%EC%9D%80+easy '''
Python
복사

parse.unquote(), parse.unquote_plus()

디코딩 처리
quote의 반대
URL 안전 문자열로 인코딩된 문자열을 디코딩하여 반환
from urllib.parse import unquote, unquote_plus print(unquote('%ED%8C%8C%EC%9D%B4%EC%8D%AC%EC%9D%80%20easy')) print(unquote_plus('%ED%8C%8C%EC%9D%B4%EC%8D%AC%EC%9D%80+easy')) #output ''' 파이썬은 easy 파이썬은 easy '''
Python
복사

urllib.robotparser

robots.txt 파일의 구문을 분석하여 해당 URL이 로봇에 의해 접근이 가능한지 확인하는 데 사용
robots.txt : 웹 서버에서 제공되는 텍스트 파일, 로봇이 해당 서버의 페이지에 접근할 때 참고하는 지침서
from urllib.robotparser import RobotFileParser url = 'https://jsonplaceholder.typicode.com/users' rp = RobotFileParser() rp.set_url(url + '/robot.txt') rp.read()
Python
복사

robotparser.can_fetch()

해당 URL이 로봇에 의해 접근 가능한지 여부 확인
from urllib.robotparser import RobotFileParser url = 'https://jsonplaceholder.typicode.com/users' rp = RobotFileParser() rp.set_url(url + '/robot.txt') rp.read() if rp.can_fetch('*', url): print('allowed to access', url) else: print('not allowed to access:', url)
Python
복사