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 ...... 생략