[Python 모듈] urlopen() - URL 데이터 확인

박주찬·2024년 5월 8일

python

목록 보기
5/10
post-thumbnail

urlopen()은 웹사이트에서 얻은 데이터를 다루는 파이썬 패키지
이 패키지 안에는 총 네개의 모듈이 있고, 이중 웹 문서를 열어 데이터를 읽어오는게 request 모듈

  • urllib.request
    - URL 열기 및 읽기
  • urllib.error
    - 다음에 의해 제기된 예외를 포함하는 urllib.request
  • urllib.parseURL
    - 구문 분석
  • urllib.robotparser
    - robots.txt파일 구문 분석

우리는 request를 파해쳐 볼거다!!

urllib.request 모듈이란?

urllib.request 모듈은 다이제스트 인증, 리다이렉션, 쿠키 등과 같은 URL이나 HTTP를 여는 데 도움이 되는 함수와 클래스를 정의함. 즉, urllib.request를 사용하면 간단하게 웹페이지 요청 및 데이터를 가져오는 것이 가능함

* digeat authentication이란, 다이제스트 액세스 인증은 웹서버가 사용자의 웹 브라우저와 사용자 이름 또는 암호와 같은 자격 증명을 협상하는 데 사용할 수 있는 합의 된 방법 중 하나임.
온라인 뱅킹 거래 내역과 같은 민감한 정보를 보내기 전에 사용자의 신원을 확인하는 데 사용할 수 있음.

urllib.request 형식

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 연결에 대한 옵션

urlopen() 함수

  • geturl(): 받아온 리소스의 URL를 반환받음
  • info(): 패킷의 매타 데이터(헤더 등)를 반환받음
  • getcode(): 응답 패킷의 HTTP 상태 코드를 반환받음
  • ★★★read(): 받아온 데이터를 바이트형으로 반환받음
  • readline(): 받아온 데이터를 바이트형으로 한 줄씩 반환받음
  • close(): 연결된 요청을 닫음



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

profile
Diamond

0개의 댓글