본문 바로가기
파이썬 (Python)/크롤링 (Crawling)

웹페이지 크롤링 + Link로 연결되어 보여주거나 호출로 보여지는 Data를 크롤링 하는 방법

by ★√★ 2021. 3. 4.

안녕하세요, 오늘 포스팅할 내용은 Link로 연결되어 있거나 호출로 보여지는 Data를 크롤링 하는 방법입니다. 그럼 Link로 연결되어 보여주거나 호출로 보여지는 Data에 대해서 하나 예문으로 보여드리면, 아래 Snap Shot에 표시한 "댓글 갯수" 입니다. 

 

 

Link-크롤링-관련-사진1
Link-크롤링-관련-사진1

 

 

 자 그럼, 위 댓글 항목에 대한 내용을 크롤링하는 방법에 대해서 설명 드리도록 하겠습니다. 설명에 앞서, 저희가 호출 했을때, 응답하는 코드에 대해서 아래와 같이 간단하게 작성하였습니다. "XX" 라고 표시한 부분에 대해서는 그때 그때 마다, 구글링을 통해서 어떤 코드인지를 찾는 걸 추천 드립니다. 

 

크롤링 수행 시 응답 코드 

 1) 1XX (정보) : 사용자의 요청을 받았으며 요청한 프로세스를 진행함

 2) 2XX (성공) : 사용자의 요청을 성공적으로 수신하였으며, 수신한 요청을 받아 들임.

 3) 3XX(리디렉션) : 사용자의 요청 처리 완료를 위해서, 추가적인 작업이 필요

 4) 4XX(클라이언트 오류) : 사용자의 요청의 문법이 잘못되었거나 요청을 처리 할 수 없음.

 5) 5XX(서버 오류) : 서버가 명백히 유효한 요청에 대해 충족을 실패함.

 

Link로 연결되어 보여주거나 호출로 보여지는 Data를 URL 가져오기 

: 위에서 보여준 댓글 갯수의 Property를 호출하는 URL을 이용하여, 원하는 Data를 출력하는 크롤링 코드를 작성해보도록 하겠습니다. 일단 크롤링 해야하는 위치를 찾아서 그 해당 URL을 찾아야 합니다. 해당 웹사이트에 개발자 도구를 실행 시켜 해당 URL을 찾습니다. 

 

 [개발자 도구] 화면 - [Network] - [해당 페이지] - [XHR] 

 

 

Link-크롤링-관련-사진2

 

- 해당 페이지를 항목을 확인 했다면, "Header" 란에서 찾을 수 있는 "Request URL" 항목을 복사하여, 접속 URL 변수에 입력을 합니다. 

 

Link-크롤링-관련-사진3

 

 

Link로 연결되어 보여주거나 호출로 보여지는 Data를 크롤링 하는 코드 구현

일단 필요한 패키지와 관련 URL을 입력해보도록 하겠습니다. 위에 2번 항목에서 알아온 URL을 아래 "Targeted_URL " 변수에 입력을 합니다. 물론 관련 필요한 패키지도 같이 선언을 해줍니다.

 


# requests, BeautifulSoup, re 라이브러리가 필요하므로 선언함.

import requests

# 희망하는 URL을 변수에 집어 넣고, 연결시키기
Targeted_URL = 'https://api.brunch.co.kr/v1/@@5ozf/13/comments?startTime=0'
Requested01 = requests.get(Targeted_URL)

print(Requested01)

- 위 코드를 실행시켜 보면 아래와 같이 200번대의 코드가 출력되면서, 사용자의 요청을 성공적으로 수신하였으며, 수신한 요청을 받아 들였다는 것을 알고 있습니다.

 

Link-크롤링-관련-사진4

 

- 그럼 위에 입력한 URL을 통해서 가져온 정보를 출력해보도록 하겠습니다. 아래와 같이 코드르 수정해서 출력을 하면, 관련 내용이 출력 되는 걸 확인 하실 수 있습니다. 

 

 


# json 형태로 출력하게 코드를 수정.

print(Requested01.json())

{'desc': 'OK', 'code': 200, 'title': '', 'extra': '', 'data': {'requestedItem': [{'no': 371855, 'userId': '5ozf', 'articleNo': 13, 'commentUserId': '3fY1', 'commentUserName': '이하나 작가', 'commentUserImage': 'http://t1.daumcdn.net/brunch/service/guest/image/A07BD0ah9vogcX2oxpT7D9nTXmc.JPG', 'commentUserConnection': None, 'commentUserDescription': None, 'message': '좋은 글 잘 보고 구독하고 갑니다. 저는 주로 여행 에세이를 쓰고 있어요. 제 브런치에도 놀러오세요~ : )', 'createTime': 1531050249000, 'stickerId': '', 'commentUserStatus': 'verify', 'status': 'PUBLISH', 'restrictTime': None, 'cleanFilterStatus': 'GOOD', 'mention': False}], 'updatedItem': None, 'totalCount': 1}, 'version': 1}

 

Link-크롤링-관련-사진5

 

 

- 위 내용 중에 원하는 것은 댓글 갯수 항목이기 때문에, 해당하는 "key" 값인 "totalCount"를 이용하여, 원하는 값을 출력 할 수 있습니다. 출력 print 함수를 아래와 같이 수정을 하시면 됩니다. 


# "key" 값인 "totalCount"를 이용하여, 원하는 값을 출력

print(Requested01.json()['data']['totalCount'])

- 위 코드를 실행을 하면, 아래와 같은 결과가 출력되는 것을 확인 하실 수 있습니다. 이렇게 첫 화면에 나와있는 정보가 아닌, 다른 Source로부터 가져와서 보여주는 Data의 정보의 경우는 이렇게 추가적인 처리를 해줘야 가져오는 걸 확인 하실 수 있습니다. 

 

Link-크롤링-관련-사진6

 


 이상입니다. 지금까지 Link로 연결되어 있거나 호출로 보여지는 Data를 크롤링 하는 방법에 대해서 포스팅을 하였습니다. 크롤링 작업이 그냥 id 와 class 의 속성만 가져와서 후딱 되는 줄 알았는데, 그 외 다른 source에서 가져오는 case에 대해서는 추가적인 작업이 필요하다는 사항을 배우고 적용해보니까, 이 부분도 반드시 필요한 부분이라고 생각이 듭니다.

 

 정말 알면 알수록 더 배워야할 것도 많고, 흥미로운 것도 너무나도 많은 거 같습니다. 한 편으로는 기대가 되지만, 한 편으로는 끝나지 않은 마라톤을 달리는 느낌이네요. 영어와 중국어도 그런거 같습니다. 그래도 공부 안하는 것보다는 하는 게 더 나은 거 같고, 준비 안하는 것보다는 하는 게 나은 거 같습니다. 왜냐하면, 우리 인간은 항상 좋은 것을 기대하면서 살아가기 때문입니다. 운이 아닌 실력을 만들기 위해서 같이 노력하시죠! 감사합니다. 

 

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

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

728x90

댓글


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