"Requests"의 두 판 사이의 차이

Pywiki
둘러보기로 가기 검색하러 가기
 
(사용자 2명의 중간 판 2개는 보이지 않습니다)
19번째 줄: 19번째 줄:
 
응답을 response에 받는다면 내용을 보기 위해선 response.text로 볼 수 있다.
 
응답을 response에 받는다면 내용을 보기 위해선 response.text로 볼 수 있다.
  
==== 응답데이터 ====
 
{| class="wikitable"
 
!데이터
 
!설명
 
|-
 
|응답.test
 
|응답받은 내용을 text 형태의 데이터로 본다. 직접 보기 위해 사용.
 
|-
 
|응답.content
 
|응답받은 내용을 바이너리 형태의 데이터로 본다. 파일로 다루기 위해 사용.
 
|}
 
 
===데이터와 함께 넘기기===
 
===데이터와 함께 넘기기===
 
{| class="wikitable"
 
{| class="wikitable"
133번째 줄: 122번째 줄:
 
|
 
|
 
|}
 
|}
 +
 +
=== 응답데이터 ===
 +
{| class="wikitable"
 +
!데이터
 +
!설명
 +
|-
 +
|응답.test
 +
|응답받은 내용을 text 형태의 데이터로 본다. 직접 보기 위해 사용.
 +
|-
 +
|응답.content
 +
|응답받은 내용을 바이너리 형태의 데이터로 본다. 파일로 다루기 위해 사용.
 +
|}
 +
 
==HTTP==
 
==HTTP==
 
===유의사항===
 
===유의사항===
173번째 줄: 175번째 줄:
 
|requests.exceptions.Timeout
 
|requests.exceptions.Timeout
 
|응답이 지연되거나 오지 않는 경우.
 
|응답이 지연되거나 오지 않는 경우.
 +
|-
 +
|json.decoder.JSONDecodeError: Extra data: ...
 +
|json.loads 를 사용할 때 데이터가 json형태가 아닌 경우.
 +
|-
 +
|doesn't match a supported version!
 +
  warnings.warn("urllib3 ({}) or chardet ({}) doesn't match a supported
 +
|버전이 안맞을 경우. 아래 방법으로 업데이트 한다.
 +
pip install -U urllib3 requests
 
|}
 
|}
 
===웹 크롤링 팁===
 
===웹 크롤링 팁===
 
  
 
개발자도구의 Network 탭에서 통신의 결과를 볼 수 있는데, 내가 무언가를 클릭했을 때 어떤 데이터가 반환되는 건지 볼 수가 있다. 해당 요청을 우클릭>copy>copy link address 를 통해 주소를 복사하면 해당 반환을 얻는 주소를 알 수 있다.
 
개발자도구의 Network 탭에서 통신의 결과를 볼 수 있는데, 내가 무언가를 클릭했을 때 어떤 데이터가 반환되는 건지 볼 수가 있다. 해당 요청을 우클릭>copy>copy link address 를 통해 주소를 복사하면 해당 반환을 얻는 주소를 알 수 있다.
 
[[분류:라이브러리]]
 
[[분류:라이브러리]]

2022년 4월 1일 (금) 20:07 기준 최신판

1 개요[편집 | 원본 편집]

웹 요청이나 API를 사용할 때 주로 사용하는 패키지.

2 보내기. input.[편집 | 원본 편집]

2.1 기본적인 사용법[편집 | 원본 편집]

요청을 보내면 객체 안에 데이터가 담긴다.

의도 방법
GET을 보낼 때 받을객체 = requests.get("http://주소")
POST를 보낼 때 받을객체 = requests.post("http://주소")

보통 받은 데이터는 바로 쓰지 못하고, 받을객체.test 형태로 변환하여 사용한다.

응답을 response에 받는다면 내용을 보기 위해선 response.text로 볼 수 있다.

2.2 데이터와 함께 넘기기[편집 | 원본 편집]

의도 설명 방법
GET에 데이터 담기 url을 문법에 맞춰 변형시켜 보내거나..

사전에 담아 보낸다.

사전을 params에 담는다.

상황에 따라 headers 요소 안에 사전을 담으면 헤더에 담을 데이터를 지정할 수 있다.

사전={ '보낼변수' : '담을내용',
        '보낼변수2' : '담을내용2'
        }
받을객체=requests.get(주소, params=사전)
POST를 보낼 때 post에선 url주소에 파라미터를 넣지 않는다.

사전을 data에 담는다.

사전={ '보낼변수' : '담을내용',
        '보낼변수2' : '담을내용2'
        }
받을객체=requests.post(주소, data=사전)

2.3 인증관련[편집 | 원본 편집]

의도 설명 방법
SSL인증을 사용하는 경우 에러가 발생하면 verify에 False를 담아 보낸다.
사전={ '보낼변수' : '담을내용',
        '보낼변수2' : '담을내용2'
        }
받을객체=requests.post(주소, data=사전, verify=False)
id와 password를 요구하는 경우 auth 안에 id와 password를 담는다.
사전={ '보낼변수' : '담을내용',
        '보낼변수2' : '담을내용2'
        }
받을객체=requests.post(주소, data=사전, auth=("id", "password"))

2.4 이외 옵션[편집 | 원본 편집]

의도 설명 방법
headers 헤더.
받을객체=requests.post(주소, headers={'Content-Type': 'application/vnd.api+json; charset=utf-8'})
cookies
timeout

2.5 요청 url의 기본형태[편집 | 원본 편집]

모듈을 사용하면 간단히 보내지기도 하지만, 다음과 같은 형태로 url을 만드는 코드를 짜서 요청하면 정확한 응답을 받을 수 있다.

도메인주소/경로?변수=내용&변수2=내용2&변수3=내용3

다음과 같은 형태로 넣을 것들을 지정하여 url을 만들어 낼 수도 있다.

params = {'pageNo': '1', 'numOfRows':'10','dataType':'json',
              'eqmtId':cctvId,'hhCode':'00','ServiceKey': key}

    params_str=''#파라미터요청을 문자열로 변환하기 위한 변수
    for i, j in params.items():
        params_str = params_str + "&" + i + "=" + j
    params_str="?"+params_str[1:]

3 응답. output.[편집 | 원본 편집]

의도 설명 방법
응답코드 보기 응답 결과에 따라 http 코드를 반환한다.

200이면 정상.

받은객체.status_code

3.1 응답데이터[편집 | 원본 편집]

데이터 설명
응답.test 응답받은 내용을 text 형태의 데이터로 본다. 직접 보기 위해 사용.
응답.content 응답받은 내용을 바이너리 형태의 데이터로 본다. 파일로 다루기 위해 사용.

4 HTTP[편집 | 원본 편집]

4.1 유의사항[편집 | 원본 편집]

헤더를 입력해야 전체 데이터를 무리없이 받아올 수 있다. 헤더가 없는 경우 어째서인지 전체 데이터를 받아오지 못한다;

url = 'https://주소'
headers = {'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Whale/2.8.108.15 Safari/537.36"}
raw = requests.get(url, headers=headers)

위와 같은 형태로 요청해야 하는데, User-Agent는 개발자모드의 console 창에서 navigator.userAgent를 입력하면 나온다.

5 JSON[편집 | 원본 편집]

response= requests.get('http://주소') #응답받은 것을 response에 담는다.

result=response.json() 이 명령은 받은 응답을 json으로 인식한다는 의미이다. 파이썬의 딕셔너리로 바꾸어준다.

result['키'] 형태로 접근이 가능하다.

5.1 JSON 보기[편집 | 원본 편집]

json tree, Online JSON Viewer를 통해 전체적인 구조를 파악할 수도 있다.

6 XML[편집 | 원본 편집]

response= requests.get('http://주소')

import xmltodict #xml을 딕셔너리로 바꾸어준다.

content=response.content

dict=xmltodict.parse(content) #이렇게 거치면 딕셔너리로 바꾸어준다.

최상단 항목이 response라면 dict['response'] 형태로 하나하나 아래로 내려간다.

저장할 땐 XML을 다루는 것보단 JSON을 다루는 게 더 나을지도.

7 데이터 저장하기[편집 | 원본 편집]

res.text가 일반 텍스트로 보는 거라면, res.content는 바이너리 형태의 데이터를 보여준다.

8 에러 파악[편집 | 원본 편집]

response.text 를 출력하면 응답메시지를 통해 어떤 에러가 났는지 볼 수 있다.

8.1 에러종류[편집 | 원본 편집]

에러 설명
requests.exceptions.Timeout 응답이 지연되거나 오지 않는 경우.
json.decoder.JSONDecodeError: Extra data: ... json.loads 를 사용할 때 데이터가 json형태가 아닌 경우.
doesn't match a supported version!

  warnings.warn("urllib3 ({}) or chardet ({}) doesn't match a supported

버전이 안맞을 경우. 아래 방법으로 업데이트 한다.

pip install -U urllib3 requests

8.2 웹 크롤링 팁[편집 | 원본 편집]

개발자도구의 Network 탭에서 통신의 결과를 볼 수 있는데, 내가 무언가를 클릭했을 때 어떤 데이터가 반환되는 건지 볼 수가 있다. 해당 요청을 우클릭>copy>copy link address 를 통해 주소를 복사하면 해당 반환을 얻는 주소를 알 수 있다.