본문 바로가기
HTML & CSS

웹 페이지 크롤링 작업 수행 위한 기초 지식 이해하기 - requests 라이브러리

by ★√★ 2021. 2. 27.

  안녕하세요, 이번 포스팅은 웹 페이지 크롤링 작업 수행 위한 기초 지식 중에 하나인 requests 라이브러리에 대해서 기재하려고 합니다.  이전 포스팅에 크롤링을 구현하는 법에 대해서 설명을 드린 내용을 이용하여 설명 드리도록 하겠습니다.

 

 

웹페이지-크롤링-request라이브러리-썸네일
웹페이지-크롤링-request라이브러리

 

 저도 사실, 그때 그냥 먼가 먼저 해보면서 배우는 게 더 나을거라고 생각했습니다. 지금도 그게 효율적인 방법 중에 하나라는 거에 대해서는 아직도 어느정도는 동의를 합니다.

 

 하지만, 그런 예도 중요하지만, 기본적인 지식에 대해서 알아야 될 거 같아서 이렇게 크롤링 작업을 위한 기초 지식에 대해

서 포스팅 하려고 합니다. 그럼 제가 나름대로 이해하고 공부한 내용을 기반으로 웹 페이지 크롤링 작업 수행 위한 기초 지식 중에 하나인 requests 라이브러리를 설명 드리도록 하겠습니다. 


1. 크롤링 기초 - requests 이해 하기 (GET 모듈)

 

: 일단 크롤링이라는 의미가 웹 페이지에 있는 정보나 데이터를 반복적인 코드를 통해서 가져오는 일련의 작업이기에, 이 웹페이지를 불러오고, 읽는 라이브러리를 이용하여야 합니다. 그게 바로 requests 입니다. requests 선언 부터 어떻게 구현하는지에 대해서 제가 간단한 예를 들어서 설명 해 드리도록 하겠습니다. 아래 예제는 "GET" 모듈을 사용하는 예입니다.

 

==================================================================================

 

# requests 라이브러리를 선언을 함
import requests

# 접속하여, 정보를 가지고 오고 싶어하는 URL을 internet_Url01 에 입력함.
internet_Url01 = "https://www.naver.com/"

# requests.get 모듈을 이용하여, internet_Url01에 입력된 URL를 불러와서 관련 정보를 test_valiable01 에 넣어 줌.
test_valiable01 = requests.get(internet_Url01)

# 관련 데이터가 잘 들어갔는지 확인하기 위해, print 로 출력함.
print(test_valiable01)

 

==================================================================================

 

 

- 위 코드를 실행을 시켜보면 아래와 같은 출력값이 출력이 됩니다. 여기에서 "<Response [200]>" 은 requests의 응답의 한 종류로서, 현재 지정한 URL에서 Data를 잘 불러와서 입력했다라고 이해하시면 됩니다.

 

 

 

웹페이지-크롤링-request라이브러리-코드-구현-사진1
웹페이지-크롤링-request라이브러리-코드-구현-사진1

 

 

 

 

- 그런데 만약, test_valiable01 에 들어있는 Data를 확인하고 싶을 때는 아래 코드를 통해서 확인 하실 수 있습니다. 

 

==================================================================================

 

# "text" value를 이용하여 관련 내용을 출력함.

print(test_valiable01.text)

==================================================================================

 

- 위 코드를 실행 시켜보면 엄청나게 많은 데이터가 출력이 되는 걸 확인 하실 수 있습니다. 다 보여 드리지는 못하고, 일부분만 아래와 같이 snap shot으로 첨부 드립니다. 참조하시면 됩니다.

 

 

웹페이지-크롤링-request라이브러리-코드-구현-사진2
웹페이지-크롤링-request라이브러리-코드-구현-사진2

 

 

2. 크롤링 기초 - requests 이해 하기 (POST Moduel)

 

: 그럼 GET 모듈에 대해서 알아 봤으니, login과 관련된 POST 모듈에 대해서도 설명 드리도록 하겠습니다. 이 부분은 login 관련된 내용이니까, 아래와 같은 창까지 접속을 하셔야 합니다. 

 

 

웹페이지-크롤링-request라이브러리-코드-구현-사진3
웹페이지-크롤링-request라이브러리-코드-구현-사진3

 

 

- 위 화면까지 접속하시고 나서, 개발자 도구를 실행을 합니다. 그리고 나서, 맞지 않은 무작위 아이디나 비밀번호를 입력을 합니다. 그러면 개발자 도구에서 입력된 정보를 기준으로 웹페이지에 표현되는 데이터를 보여주게 됩니다. 그 중 login 관련 항목을 선택하면, login 관련된 내용을 확인 하실 수 있습니다. 아래 사각 박스로 표현되어 있는 "Request Method" 를 보시면, POST 로 표현이 되어 있는 걸 확인 하실 수 있습니다. 즉, 이 호출은 POST 호출이기에 이렇게 표시가 되어 나타나게 됩니다. 그 위에 있는 URL을 이용해서, 크롤링을 진행하려고 합니다. 

 

 

웹페이지-크롤링-request라이브러리-코드-구현-사진4
웹페이지-크롤링-request라이브러리-코드-구현-사진4

 

 

- 위 접수한 URL을 이용하여, 아래와 같은 코드를 구현을 하실 수 있습니다. 위 GET 모듈과 다른 점은, login information을 받는 다는 것입니다. 일단 GET 모듈은 정보만 받는 거지만, POST 모듈은 우리가 어떤 정보를 얻기 위해서 login information을 입력해야 하기 때문입니다.

 

==================================================================================

 

# requests 라이브러리를 선언을 함
import requests

# 접속하여, 정보를 가지고 오고 싶어하는 URL을 internet_Url01 에 입력함.
internet_Url01 = "https://nid.naver.com/nidlogin.login"

login_inform = {

"id" : "네이버 ID",
"pw" : "네이버 비밀번호"


}

# requests.get 모듈을 이용하여, internet_Url01에 입력된 URL를 불러와서 관련 정보를 test_valiable01 에 넣어 줌.
test_valiable01 = requests.post(internet_Url01,login_inform )

# 관련 데이터가 잘 들어갔는지 확인하기 위해, print 로 출력함.

print(test_valiable01)
print(test_valiable01.text)

 

==================================================================================

 

 

- 위 코드를 실행을 해보면 위에서 GET 모듈과 같이 많은 양의 데이터가 보여주는 걸 확인 하실 수 있습니다. 그런데, 그 중에 중간 정도에 보시면, 아래와 같은 문구를 확인 하실 수 있습니다. 제가 개인적으로 경험하기로는 네이버는 크롤링을 허용하지 않은 거 같습니다. 제가 말씀드리는 것은 자동로그인을 위한 크롤링을 말씀드리는 것입니다. 시스템적인 매크로 (반복 작업)을 통해서 서버의 과부화를 막으려는 의도라고 생각합니다. 다른 웹사이트를 통해서 테스트 해보시는 걸 추천 드립니다.

 

 

웹페이지-크롤링-request라이브러리-코드-구현-사진5
웹페이지-크롤링-request라이브러리-코드-구현-사진5


3. 크롤링 기초 - requests 의 헤더(Headers) & Status Code 이해 하기 

: 1, 2번 항목을 통해서 GET, POST 모듈에 대해서 알아 봤고, 세부항목으로 Headers & Status Code를 설명해 드리도록 하겠습니다. 간혹, URL을 통해서 크롤링이 잘 되지 않는 경우가 종종 있습니다. 그럴 경우에 사용하는 Information이 헤어(Headers) 라는 속성 값입니다. 그리고 현재 응답코드를 확인하고 싶으면, 아까 처럼 그냥 데이터 수신 받는 변수를 print로 해서 출력할 수 도 있지만, Status Code를 통해서 현재 reqeusts 응답 코드를 확인 하실 수 있습니다. 위에 구현한 코드를 이용하여 보여 드리도록 하겠습니다. 

 

- 일단 네이버에 접속하시고, 개발자 도구를 실행 시킵니다. 그럼 원하는 항목을 선택하시면, 아래와 같이 "Request Headers" 쪽에 명시되어 있는 정보들을 확인 하실 수 있습니다. 이 부분 중에 "User Agent" 항목을 이용하여 구현해보도록 하겠습니다.

 

 

웹페이지-크롤링-request라이브러리-코드-구현-사진6
웹페이지-크롤링-request라이브러리-코드-구현-사진6

 

 

==================================================================================

 

# requests 라이브러리를 선언을 함
import requests

# 접속하여, 정보를 가지고 오고 싶어하는 URL을 internet_Url01 에 입력함.
internet_Url01 = "https://www.naver.com/"




# headers Information을 가져 올 딕셔너리 변수 "TEST_Headers " 를 선언하여, User-Agent 항목을 입력 해줌.

TEST_Headers = {

'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36'
}


# requests.get 모듈을 이용하여, internet_Url01에 입력된 URL를 불러와서 관련 정보를 test_valiable01 에 넣어 줌.

   추가적으로 headers value도 추가적으로 고려함.
test_valiable01 = requests.get(internet_Url01, headers = TEST_Headers  )

# 관련 데이터가 잘 들어갔는지 확인하기 위해, print 로 출력함.
print(test_valiable01)

print(test_valiable01.text)

 

==================================================================================

 

- 위 코드를 실행을 시켜보면 아래와 같이 1번 항목에서 실행 시킨 것과 같이 데이터가 출력이 되는 것을 확인 하실 수 있습니다. 이런 headers information은 URL Information도 크롤링이 안 될 경우에 추가적으로 사용하시는 걸로 일단 인지하시면 될 거 같습니다. 

 

 

웹페이지-크롤링-request라이브러리-코드-구현-사진7
웹페이지-크롤링-request라이브러리-코드-구현-사진7

 

 

- 그리고 마지막으로 Status Code 는 아래 코드를 추가적으로 첨부해주시면 출력을 보실 수 있습니다. 아래 snap shot을 보시면 print로 그냥 그 변수를 출력하는 것과 Status_code value 를 이용해서 확인 코드를 출력하는 것 둘 다 확인 하실 수 있습니다.

 

==================================================================================

 

# 관련 데이터가 잘 들어갔는지 확인하기 위해, print 로 출력함.
print(test_valiable01)
print(test_valiable01.status_code)

 

==================================================================================

 

 

웹페이지-크롤링-request라이브러리-코드-구현-사진8
웹페이지-크롤링-request라이브러리-코드-구현-사진8


 

 이상입니다. 이번 포스팅은 크롤링에서 정말 필수적으로 사용하는 requests 라이브러리를 중심적으로 알아봤습니다. 일단 requests 라이브러리를 사용하는 것은 알았지만, GET, POST 모듈이 어떤 Base를 기반으로 이용하는지에 대해서 더 알아가는 기회가 되었던 거 같습니다. 

 

 그리고 크롤링을 사용하는 사용자는 엄청 편하지만, 그로 인한, 사이트 과부하 등으로 정작 홈페이지를 관리하시는 분들에게는 또 다른 고민거리가 될 수도 있을 거라는 느낌도 받았습니다. 나중에 웹사이트를 오픈할 때 이 부분도 고려해서 할 거 같습니다. 정말 쉬운 게 하나도 없는 거 같습니다. 이 사소한 것도 챙기고, 그것을 무리 없이 구현하는게 정말 능력자가 아닐까 라는 생각을 하게 됩니다. 우리가 같이 공부 열심히 해서 모두 다 그런 능력자가 되시죠. 오늘도 공부하느라고 너무나도 수고 하셨구요, 항상 말씀드리지만, 같이 성장하시죠! 감사합니다. 

 

제 Posting이 조금이나마 정보 전달에 도움이 되셨길 빌며, 되셨다면, 구독, 댓글, 공감 3종 세트 부탁 드립니다. 감사합니다. 

[저작권이나, 권리를 침해한 사항이 있으면 언제든지 Comment 부탁 드립니다. 검토 후 수정 및 삭제 조치 하도록 하겠습니다. 그리고, 기재되는 내용은 개인적으로 습득한 내용이므로, 혹 오류가 발생할 수 있을 가능성이 있으므로, 기재된 내용은 참조용으로만 봐주시길 바랍니다. 게시물에, 오류가 있을때도, Comment 달아 주시면, 검증 결과를 통해, 수정하도록 하겠습니다.]

728x90

댓글


// 내부링크를 현재창으로 열기 // Open internal links in same tab