Urllib 라이브러리

GreenBean·2021년 9월 30일
0
post-thumbnail

Urllib 라이브러리

  • urllib.request는 URL(Uniform Resource Locator)을 가져오기 위한 파이썬 모듈
  • urlopen 함수의 형태로, 매우 간단한 인터페이스를 제공
  • 다양한 프로토콜을 사용하여 URL을 가져올 수 있으며 기본 인증(basic authentication), 쿠키, 프락시 등과 같은 일반적인 상황을 처리하기 위한 약간 더 복잡한 인터페이스도 제공

request와 urllib의 차이

  • requests
    • 데이터를 보낼 때 딕셔너리 형태로 보냄
    • 없는 페이지를 요청해도 에러를 띄우지 않음
  • urllib
    • 데이터를 보낼 때 인코딩하여 바이너리 형태로 보냄
    • 없는 페이지를 요청하면 에러를 띄움
    • urllib는 Request()함수를 이용하여 요청 객체를 만들 때 두 번째 인자에는 데이터, 세번째 인자에는 헤더가 들어감
      • 만약 두 번째 인자 값이 존재한다면 POST 요청, 존재하지 않는다면 GET 요청을 보냄
      • 두번째 인자의 존재에 따라서 GET인지 POST인지가 결정

urllib

  • urllib는 Python에서 웹과 관련된 데이터를 손쉽게 이용하도록 도와주는 라이브러리
  • urllib 라이브러리는 내부에 총 4개의 모듈이 존재
    • 그 중에 하나는 웹을 열어서 데이터를 읽어오는 역할을 하는 request 모듈
  • 웹 문서 불러오기
    • urlopen 함수의 인자로 데이터를 얻고 싶은 웹 페이지의 주소를 주면 됨
    • urlopen 함수는 웹에서 얻은 데이터에 대한 객체를 반환
# 웹 문서 불러오기

import urllib.request

info = urllib.request
info.urlopen("https://www.naver.com")

>>> <http.client.HTTPResponse object at 0x000001C784A32240>
  • 웹 서버 정보 받아오기
    • getheaders() 함수를 사용하면 서버에 대한 정보를 리스트로 돌려줌
    • 출력된 결과를 통해 운영체제나 날짜, 타입 등 여러 가지 정보를 알 수 있으며 이 정보들은 홈페이지가 어떤 형식으로 만들어 졌는지 알 수 있음
# 웹 서버 정보 받아오기

info = urllib.request
site = info.urlopen("https://www.naver.com")
headers = site.getheaders()

for i in headers:
    print(i)

>>> ('Server', 'NWS')
>>> ('Date', 'Tue, 22 May 2020 06:35:45 GMT')
>>> ('Content-Type', 'text/html; charset=UTF-8')
>>> ('Transfer-Encoding', 'chunked')
>>> ('Connection', 'close')
>>> ('Cache-Control', 'no-cache, no-store, must-revalidate')
>>> ('Pragma', 'no-cache')
  • 웹 페이지 상태 확인하기
info = urllib.request
site = info.urlopen("https://www.naver.com")
site.status

>>> 200
  • 웹 페이지 데이터 읽어오기
    • read() 함수를 사용하게 되면 문서의 HTML 코드를 출력
    • 크롤러를 제작할 때도 read() 함수를 사용해서 HTML 코드를 불러온 뒤 원하는 데이터만 골라내는 작업을 하게 됨
# 웹 페이지 데이터 읽어오기

info = urllib.request
site = info.urlopen("https://www.pythonchallenge.com")
site.read()

>>> b'<html>\n<head>\n<title>The Python Challenge<title>\n<meta name="keywords"\n
<content="Python Challenge, Python, Challenge, programming language, learning 
python, exploring python, riddle, game, puzzle, brain teasers" />\n <meta name
="description" content="Python challenge home page,\mThe ...... 생략
profile
🌱 Backend-Dev | hwaya2828@gmail.com

0개의 댓글