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에서 공부해보자!
'파이썬python > 파이썬 웹 크롤링 web crawling' 카테고리의 다른 글
파이썬 웹 크롤링 공부를 시작하며 (0) | 2021.10.01 |
---|