HTTP
GET함수: 데이터 가져올 때 사용
헤더 필드
HTTP 응답
200번대: 정상
400번대: 클라이언트 측 문제
500번대: 서버 문제
REST API :자원을 URL로 표현, HTTP로 자원의 행위를 정의(그냥 규칙이라고 보면 됨)
URL 구성 요소
- 프로토콜(Scheme): 통신 규칙
- 호스트(Host): 도메인 이름 또는 IP 주소
- 포트(Port): 서비스 접속 번호 (생략 가능, HTTP는 80, HTTPS는 443)
- 경로(Path): 자원의 위치를 나타내는 문자열
- 쿼리 스트링(Query String): 자원에 대한 추가 정보 (필터링, 검색어 등)
API 사용
import urllib.request
import urllib.parse
client_id = "너의_네이버_Client_ID_여기에" # 네이버 개발자센터에서 발급받은 Client ID
client_secret = "너의_네이버_Client_Secret_여기에" # 네이버 개발자센터에서 발급받은 Client Secret
encText = urllib.parse.quote("인공지능") # 검색어 '인공지능'을 URL 인코딩 (UTF-8)해서 안전하게 만들어줘
url = "https://openapi.naver.com/v1/search/blog?query=" + encText # 블로그 검색 API의 기본 주소에 쿼리 붙이기
# XML 결과로 받고 싶다면 아래 주석 해제하고 위 줄은 주석 처리해도 됨
# url = "https://openapi.naver.com/v1/search/blog.xml?query=" + encText
request = urllib.request.Request(url) # URL로 요청(Request) 객체 생성
request.add_header("X-Naver-Client-Id", client_id) # 인증을 위해 Client ID 헤더에 추가
request.add_header("X-Naver-Client-Secret", client_secret) # 인증을 위해 Client Secret도 헤더에 추가
response = urllib.request.urlopen(request) # 요청 보내고 응답 받아오기
rescode = response.getcode() # 응답 상태 코드(예: 200, 401 등) 확인
if rescode == 200: # 응답이 성공(200)일 때
response_body = response.read() # 응답 본문을 바이트로 읽고
print(response_body.decode('utf-8')) # UTF-8로 디코딩해서 출력!
else: # 응답이 실패했을 때
print("Error Code:" + str(rescode)) # 오류 코드 출력
이런식으로 코드 짜면 응답 받아서 JSON 형식으로 출력되는데 이걸 예쁘게 다듬으려면
# requests 라이브러리 임포트
import requests
from urllib.parse import quote
# 검색어 설정
search_query = "인공지능"
# API 기본 URL
base_url = "https://openapi.naver.com/v1/search/blog"
# API 요청 헤더 설정
headers = {
"X-Naver-Client-Id": client_id,
"X-Naver-Client-Secret": client_secret
}
# API 요청 파라미터 설정
params = {
"query": search_query, # 검색어
"display": 10, # 검색 결과 출력 건수 (기본값: 10, 최대: 100)
"start": 1, # 검색 시작 위치 (기본값: 1, 최대: 1000)
"sort": "sim" # 정렬 방식 - sim: 정확도순, date: 날짜순
}
# GET 요청 보내기 (params 딕셔너리 사용)
response = requests.get( # 한글 자동으로 UTF-8인코딩 함
base_url,
headers=headers,
params=params
)
# 응답 상태 코드 확인 및 결과 출력
if response.status_code == 200:
# JSON 형식으로 응답 데이터 파싱
result = response.json()
print(result)
# 전체 검색 결과 수 출력
print(f"총 검색 결과: {result['total']} 건")
print(f"현재 페이지: {params['start']} / {result['total']}")
print("-" * 50)
# 검색 결과 출력
for item in result.get('items', []):
print(f"제목: {item['title']}")
print(f"블로거: {item['bloggername']}")
print(f"작성일: {item['postdate']}")
print(f"링크: {item['link']}")
print(f"설명: {item['description']}")
print("-" * 50)
else:
# 에러 발생시 상태 코드와 에러 메시지 출력
print(f"Error Code: {response.status_code}")
print(f"Error Message: {response.text}")
이렇게 이쁘게 출력 가능함
크롤링
개발자 모드에서 원하는 요소 클릭해서 보면 됨.
그 중 네트워크를 사용하면 사용자 로그까지 볼 수 있다.
'데이터분석 6기 > 본캠프' 카테고리의 다른 글
2025-05-24 정적 크롤링 과제 (0) | 2025.05.24 |
---|---|
2025-05-23 크롤링 (1) | 2025.05.23 |
2025-05-21 태블로 메뉴 만들기 (0) | 2025.05.21 |
2025-05-21 API KEY 등록 (1) | 2025.05.21 |
2025-05-20 실전 프로젝트 PPT제작 (0) | 2025.05.20 |