[WebCrawling] requests 라이브러리

MINJEE·2023년 12월 7일
0

SMHRD_5_WebCrawling

목록 보기
2/4
post-thumbnail

requests 라이브러리

: 접근할 웹페이지의 데이터를 request/response를 위한 라이브러리
: 파이썬에서 사용되는 HTTP 요청을 보내고 받는 기능을 제공하는 라이브러리

◉ requests 라이브러리 Import하기

import requests

◉ requests.get() 함수

: HTTP GET 요청을 보내는 함수
url = 'http://www.example.com'
response = requests.get(url, params={'key':'value'}, headers={'key':'value'}, auth=('username','password')) # url 브라우저 요청
response # 응답메세지 확인

reponse.status_code # 응답의 상태코드
response.text # html문서 형식이 아닌 파이썬 형식의 텍스트 데이터 (응답의 본문 데이터)
  • get()함수의 파라미터
    • url : GET 요청을 보낼 URL 주소 지정 (새로운 Requests객체를 위한 URL)
      • 주의사항 : 프로토콜(http 등)을 꼭 입력해줘야함! (입력안하면 에러발생)
    • 파라미터 params : url에 추가할 쿼리 파라미터를 딕셔너리 형태로 지정
    • 파라미터 headers : 요청 헤더에 포함시킬 헤더 지정
      • headers = {’User-Agent’ : '개발자모드에서 Network-Response Headers부분에서 copy'} → 응답메세지가 <Response [406]> 일 경우 추가하는 부분
    • 파라미터 auth : 요청에 포함시킬 인증 정보(사용자 이름, 비밀번호) 지정

      url은 필수로 작성해야하는 필수 파라미터!
      params, headers, auth는 선택 파라미터!

  • get()함수의 반환값 : GET 요청에 대한 응답을 반환 (위 코드에서 response변수에 저장)

  • response.status_code : 응답 상태코드

    • 200 : 성공적으로 응답 받음
    • 400대 : 클라이언트의 요청 문제
      • 404 : 클라이언트가 요청한 리소스를 서버에서 찾을 수 없을 때
      • 406 : 요청한 리소스를 서버에서 제공할 수 없는 형식으로 요청한 경우
        • 해결방법
          1. 해당 사이트의 개발자도구(F12)에서 network 클릭 → Name의 url 클릭 → Response Headers부분을 참고하여 dictionary형태로 get함수의 headers에 대입!
          2. 개발자도구에서 console 클릭 → navigator.userAgent 입력 → dictionary형태로 headers에 대입
    • 500대 : 서버의 문제

  • response.text : 응답 본문

    • '<!doctype html> ~ </html>'형태의 HTML문서를 텍스트 형태로 반환

◉ 예시1 : Request - Success

import requests as req
res_google = req.get('https://www.google.com') # https(프로토콜)을 꼭 기재해줘야 함(www.google.com만 입력하면 에러)
res_google ## Response [200]

◉ 예시2 : Request - Failed

res_melon = req.get('http://www.melon.com')
res_melon ## Response [406] : 서버에서 제공할 수 없는 형식으로 요청 문제

# headers매개변수 추가하기
head = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36'}
res_melon = req.get('http://www.melon.com', headers=head)
res_melon ## Response [200]
profile
개발, 분석 배운 내용 정리하기!

0개의 댓글