파이썬 웹크롤링 #1. requests 리퀘스트 라이브러리 -1

2021. 10. 1. 11:01파이썬python/파이썬 웹 크롤링 web crawling

반응형

앞으로 배우게 될 내용 

1. 가장 일반적인 HTTP methods 를 사용하여 requests 만들기 

2. query string  쿼리 문자열과 메세지 본문을 이용하여 요청의 헤더 및 데이터 사용자 지정

3. 인증된 요청 만들기

4. requests 와 responses 로 부터 데이터 검사하기 

5. 애플리케이션이 백업되거나 느려지지 않도록 요청을 구성

 

 

THE GET request

requests.get('요청하려는 사이트 URL')

 

 

THE Response 

response = requests.get('요청하려는 사이트 URL')

 

Response의 인스턴스인 get()의 반환 값을 캡처하여 response라는 변수에 저장했다. 이제 response 를 사용하여 GET 요청 결과에 대한 많은 정보를 볼 수 있습니다.

 

 

 

Status Codes 

상태 코드는 요청 상태를 알려줍니다.

if response:
    print('Success!') # 이 코드는 status code가 200이라는 의미는 아니다. 
else:
    print('An error has occurred.')
if response.status_code == 200:
    print('Success!')
elif response.status_code == 404:
    print('Not Found.')

 

그 이유는 204에서 400 사이의 다른 상태 코드(예: 204 NO CONTENT 및 304 NOT MODIFIED)도 실행 가능한 응답을 제공한다는 점에서 성공적인 것으로 간주되기 때문이다.

 

 

 

if 문에서 응답의 상태 코드를 확인하고 싶지 않다고 가정해보자. 대신 요청이 실패한 경우 예외를 발생시키려고 한다. 

.raise_for_status()를 사용하여 이 작업을 수행할 수 있다. 

 

import requests
from requests.exceptions import HTTPError

for url in ['요청할 사이트 or 사이트들']:
    try:
        response = requests.get(url)

        # If the response was successful, no Exception will be raised
        response.raise_for_status()
    except HTTPError as http_err:
        print(f'HTTP error occurred: {http_err}')  # Python 3.6
    except Exception as err:
        print(f'Other error occurred: {err}')  # Python 3.6
    else:
        print('Success!')

 

 

 

Content

 

GET 요청의 응답에는 메시지 본문에 payload  페이로드( = 사용에 있어서 전송되는 데이터 )라고 하는 몇 가지 중요한 정보가 있는 경우가 많다. Response의 속성과 메소드를 사용하여 다양한 형식으로 페이로드를 볼 수 있다.

.content를 사용하면 응답 페이로드의 원시 바이트에 액세스할 수 있지만 UTF-8과 같은 문자 인코딩을 사용하여 문자열로 변환하려는 경우가 .text에 액세스하면 응답이 자동으로 수행됩니다.

 

response.content    # 바이트로 response 의 content 를 볼 수 있다 

response.text       #  문자열로  response 의 content 를 볼 수 있다

 

바이트를 str로 디코딩하려면 인코딩 체계가 필요하기 때문에 지정하지 않으면 요청은 응답의 헤더를 기반으로 인코딩을 추측하려고 시도합니다. .text에 액세스하기 전에 .encoding을 설정하여 명시적 인코딩을 제공할 수 있습니다.

 

response.encoding = 'utf-8' # Optional: requests infers this internally
>>> response.text

 

To get a dictionary, you could take the str you retrieved from .text and deserialize it using json.loads(). However, a simpler way to accomplish this task is to use .json():

딕셔너리(색인을 기반으로 돌아가는 데이터 타입, 특정 키값을 넣으면 값이 반환된다, JAVA 에서는 HashMap 해쉬맵) 을 얻으려면 .text에서 검색한 str을 가져오고 json.loads()를 사용하여 역직렬화할 수 있다. 그러나 이 작업을 수행하는 더 간단한 방법은 .json()을 사용하는 것이다.

 

.json()의 반환 값의 유형은 딕셔너리이므로 키로 개체의 값에 액세스할 수 있습니다.

 

 

 

Headers

 

응답 헤더는 응답 페이로드의 콘텐츠 유형 및 응답을 캐시하는 시간 제한과 같은 유용한 정보를 제공할 수 있다. 이러한 헤더를 보려면 .headers에 액세스하면 된다. 

 

response.headers

 

 

 

나머지 내용은 requests 리퀘스트 라이브러리 -2에서 공부해보자! 

 

 

 

 

 

반응형