urlopen()은 웹사이트에서 얻은 데이터를 다루는 파이썬 패키지
이 패키지 안에는 총 네개의 모듈이 있고, 이중 웹 문서를 열어 데이터를 읽어오는게 request 모듈
우리는 request를 파해쳐 볼거다!!
urllib.request 모듈은 다이제스트 인증, 리다이렉션, 쿠키 등과 같은 URL이나 HTTP를 여는 데 도움이 되는 함수와 클래스를 정의함. 즉, urllib.request를 사용하면 간단하게 웹페이지 요청 및 데이터를 가져오는 것이 가능함
* digeat authentication이란, 다이제스트 액세스 인증은 웹서버가 사용자의 웹 브라우저와 사용자 이름 또는 암호와 같은 자격 증명을 협상하는 데 사용할 수 있는 합의 된 방법 중 하나임.
온라인 뱅킹 거래 내역과 같은 민감한 정보를 보내기 전에 사용자의 신원을 확인하는 데 사용할 수 있음.
urllib.request.urlopen(url, data = None, timeout, cafile = None, capath = None,
cadefault = False, context = None)
url : url 인자에는 문자열로 된 url이나 Request 객체를 넣어줌
(Request 객체는 urllib.request.Requset클래스로 인스턴트를 받아옴)
data: 인자에는 POST 방식으로 요청 시의 데이터를 넣어줌 (@@@@기본값이 GET인가봄 - 내생각)
timeout: timeout 인자에는 선택적 사용 가능, 연결 시도에 대한 시간 초과 '초(seconds)'를 지정
cafile, capath, cadefault: CA 인증서에 대한 인자. 인증서 검증에 대한 값들을 전달해줌
context: ssl.SSLContext객체를 넣어줌. SSL 연결에 대한 옵션
from urllib.request import urlopen
html = urlopen('http://www.pythonscraping.com/exercises/exercise1.html') # web
print(html)
# b: byte stream, 한글 깨짐
#// -> <http.client.HTTPResponse object at 0x000001218E0B1750>
----------------------------------------------------------------------
# UnicodeEncodeError
# html = urlopen('https://ko.wikipedia.org/wiki/케빈_베이컨').read()
# UnicodeEncodeError
# html = urlopen('https://ko.wikipedia.org/wiki/' + '케빈_베이컨').read()
from urllib.parse import quote # Unicode 기반 문자 코드로 변경
print(quote('케빈_베이컨'))
html = urlopen('https://ko.wikipedia.org/wiki/' + quote('케빈_베이컨')).read()
print(str(html, 'utf-8')[:1000]) # bytes -> str
실행 결과:
<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-sticky-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-0 vector-feature-client-preferences-disabled vector-feature-client-prefs-pinned-clientpref-0 vector-feature-night-mode-disabled skin-theme-clientpref-day vector-toc-available" lang="ko" dir="ltr">
<head>
<meta charset="UTF-8">
<title>케빈 베이컨 - 위키백과, 우리 모두의 백과사전</title>
<script>(function(){var className="client-js vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-sticky-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vecto
type(urlopen('https://ko.wikipedia.org/wiki/' + quote('케빈_베이컨')))
실행 결과:
http.client.HTTPResponse
(출처)
https://ojhallae.tistory.com/135https://ojhallae.tistory.com/135
https://m.blog.naver.com/swimmingsdesign/223026993544