[업무 지식]/Crawling
[Request] 웹 페이지 간단하게 추출하기
by 에디터 윤슬
2024. 12. 31.
》 import requests # 라이브러리를 읽어 들입니다.
r = requests.get('http://hanbit.co.kr') # get() 함수로 웹 페이지를 추출합니다.
》 type(r) # get() 함수의 반환값은 Response 자료형입니다.
‹class 'requests models Response'>
》 .status_code # status_code 속성으로 HTTP 상태 코드를 확인합니다.
200
》 r.headers['content-type'] # headers 속성으로 HTTP 헤더를 딕셔너리로 추출합니다.
'text/html; charset=UTF-8'
》 r.encoding # encoding 속성으로 HTTP 헤더를 기반으로 인코딩을 추출합니다.
'UTF-8'
>>> r.text # text 속성으로 str 자료형으로 디코딩된 응답 본문을 추출할 수 있습니다.
<!DOCTYPE html》\r\n<html lang="ko"》 〈title》한빛출판네트워크</title>•••
》 r.content # Content 속성으로 bytes 자료형의 응답 본문을 추출할 수 있습니다.
b'<IDOCTYPE html> rInKhtml lang=-"ko".. <title>|xed x951x9c |xeb|xb9|x9b|xec |xb61x9c|xed x8c |x90\xebl
x84\xa4\xed\x8a\xb8\xec|x9b\x8c\xed\x81\xac</title>...
Response 객체의 text 속성을 기반으로 유니코드 문자열을 쉽게 추출할 수 있습니다. HTTP 헤더에서 응답 본문의 인코딩 방식을 추출하고, str 자료형으로 디코딩하기만 하면 됩니다. 응답 본문이 8ip 형 식 또는 Deflate 형식으로 압축돼 있는 경우에도 자동으로 해석해 주므로 압축과 관련된 내용은 따로 신경 쓰지 않아도 됩니다.
Response 객체에는 json() 메서드가 있어서 JSON 형식의 응답을 간단하게 디코드해서 dict 또는 list를 추출할 수 있습니다.
› r = requests.get ('http://weather.livedoor.com/forecast/webservice/json/v1?city=130010')
› r.json()
이번 절에서 예로 사용한 get() 함수는 HTTP 메서드 GET에 대응되는 요청입니다. 이 밖에도 post(), put(), delete(), head(), options() 함수가 있으며, 각각 HTTP 메서드 POST, PUT, DBLETE, HEAD, OPTIONS에 대응합니다.
# POST 메서드로 전송합니다.
# 키워드 매개변수 data에 딕셔너리를 지정하면 HTML 입력 양식처럼 전송됩니다.
›› r= requests.post('http://httpbin.org/post', data=('key1': 'value1'})
이 밖에도 HTTP 헤더 추가 또는 Basic 인증 등의 다양한 옵션을 지정할 수 있습니다.
# 요청에 추가할 HTTP 헤더는 키워드 매개변수 headers에 딕셔너리로 지정합니다.
» r = requests.get('http://httpbin.org/get',
headers=['user-agent': 'my-crawler/1.0 (+foobexample.com)'})
# Basic 인증은 키워드 매개변수 auth로 지정합니다.
» r= requests.get('https://api.github.com/user',
auth=('〈GitHub의 사용자 ID〉' , '〈GitHub의 비밀번호>'))
# URL 매개변수는 키워드 매개변수 params로도 지정할 수 있습니다.
>>> r = requests.get('http://httpbin.org/get', params = {'key1: 'value1'})
# HTTP 헤더를 여러 번 사용할 때는 Session 객체를 사용합니다.
>>> s = requests.Session()
>>> s.headers.update({'user-agent': 'my-crawler/1.0 (+foo@example.com)'})
# Session 객체에는 get(), post() 등의 메서드가 있으며
# requests.get(), requests.post() 등과 같은 방식으로 사용합니다.
>>> r = s.get('http://naver.com/')
>>> r = s.get('http://daum.net')