본문으로 바로가기

소개

 

지난 포스팅에서 간단하게 태그에 접근해서 데이터를 추출하고, 범위를 구하는 방법을 알아보았습니다.

 

이번 포스팅에서는 조금 더 들어가서 자바스크립트에서 다른 경로(URL)로 호출해서 가져오는 데이터를 수

 

집하는 방법에 대해 알아보겠습니다.

 

 

동적인 데이터 수집하는 방법

 

다음과 같이 버튼을 눌렀을 때 갑자기 HTML 태그에 붙는 것을 확인하실 수 있습니다.

 

 

 

강조하고 싶은 것은 개발자도구의 Network 탭을 잘 활용하는 것인데요.

보고있는 페이지의 데이터들(HTML, JS, 텍스트, 이미지 등)은 Network 탭에서 확인하실 수 있구요.

 

현재 페이지에서 동적으로 변화하는 데이터와 같은 것들은 JS 에 의한 것입니다.

큰 웹사이트 같은 경우는 대부분 API 를 사용하여 데이터를 호출하기 때문에 API 경로가 존재합니다.

그 API 경로를 찾으면 되겠습니다.

 

 

 

comment 라는 키워드를 가지는 URL 을 찾았습니다.

누가봐도 댓글 데이터를 요청하는 것을 알 수 있습니다.

 

 

 

Response 탭을 보니 댓글 데이터가 들어있습니다.

 

 

 

GET 방식으로 해당 URL 로 요청을 할 것입니다.

응답은 JSON 으로 받을 수 있네요.

 

 

 

코드입니다.

import requests
from bs4 import BeautifulSoup as bs

result = []
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36'}
url = 'https://comment.daum.net/apis/v1/posts/147107576/comments?parentId=0&offset=0&limit=3&sort=POPULAR&isInitial=true&hasNext=true&randomSeed=1596906073'

res = requests.get(url, headers=headers)
if res.status_code == 200:
    json_data = res.json()
    for d in json_data:
        print(d['content'])
모두 무사히 오늘 밤 넘기시다.불편한 곳에서 새우잠을 자도 수재민들 모두 희망을 버리지 마세요.꾸벅
댓글에 ㅋㅋ 진짜 제정신이야? 문재인탓?
그럼 중국 일본 폭우도 문재인탓이겠네? 아 문재인이 중국 일본 한국 3국 대통령이구나
진짜 정치병이 걸려도 말 같은 소리를 해야지
태풍도  온다는데 너무 야속합니다ㅠ
빨리  이 상황이 끝났으면 하네요..
모두  힘내세요..

 

 

근데 한가지 문제점이 있죠.

이게 어떠한 뉴스 기사의 댓글인지 모릅니다.

{'id': 561726477, 'userId': 26644586, 'postId': 147107576, 'forumId': -99, 'parentId': 0, 'type': 'COMMENT', 'status': 'S',
'flags': 256, 'content': '모두 무사히 오늘 밤 넘기시다.불편한 곳에서 새우잠을 자도 수재민들 모두 희망을 버리지 마세요.꾸벅', 'createdAt': '2020-08-08T22:47:12+0900', 'updatedAt': '2020-08-08T22:47:12+0900', 'childCount': 3, 'likeCount': 256, 'dislikeCount': 5, 'recommendCount': 251, 'user': {'id': 26644586, 'status': 'S', 'type': 'USER', 'flags': 0, 'icon': 'https://k.kakaocdn.net/dn/wWkOt/btqGexxILDf/CpkrwmSQ5eSz8LPrR8eBI0/img_110x110.jpg', 'username': 'KAKAO:1001944003', 'roles': 'ROLE_USER,ROLE_KAKAO,ROLE_IDENTIFIED', 'providerId': 'KAKAO', 'providerUserId': '124987597', 'displayName': '이병철', 'description': '', 'commentCount': 492}}
{'id': 561726457, 'userId': 22084268, 'postId': 147107576, 'forumId': -99, 'parentId': 0, 'type': 'COMMENT', 'status': 'S',
'flags': 256, 'content': '댓글에 ㅋㅋ 진짜 제정신이야? 문재인탓? \n그럼 중국 일본 폭우도 문재인탓이겠네? 아 문재인이 중국 일
본 한국 3국 대통령이구나 \n진짜 정치병이 걸려도 말 같은 소리를 해야지', 'createdAt': '2020-08-08T22:47:07+0900', 'updatedAt': '2020-08-08T22:47:07+0900', 'childCount': 35, 'likeCount': 900, 'dislikeCount': 115, 'recommendCount': 785, 'user': {'id': 22084268, 'status': 'S', 'type': 'USER', 'flags': 0, 'icon': 'https://t1.daumcdn.net/profile/1KR32SV9tjI0', 'url': '', 'username': 'DAUM:ALG3Q', 'roles': 'ROLE_USER,ROLE_DAUM,ROLE_IDENTIFIED', 'providerId': 'DAUM', 'providerUserId': 'ALG3Q', 'displayName': 'Gw', 'description': '', 'commentCount': 6832}}
{'id': 561726470, 'userId': 54008505, 'postId': 147107576, 'forumId': -99, 'parentId': 0, 'type': 'COMMENT', 'status': 'S',
'flags': 256, 'content': '태풍도  온다는데 너무 야속합니다ㅠ\n빨리  이 상황이 끝났으면 하네요..\n모두  힘내세요..', 'createdAt': '2020-08-08T22:47:09+0900', 'updatedAt': '2020-08-08T22:47:09+0900', 'childCount': 0, 'likeCount': 217, 'dislikeCount': 4, 'recommendCount': 213, 'user': {'id': 54008505, 'status': 'S', 'type': 'USER', 'flags': 0, 'icon': 'https://t1.daumcdn.net/profile/d2tzd6DQNc10', 'username': 'DAUM:DtOUv', 'roles': 'ROLE_USER,ROLE_DAUM,ROLE_IDENTIFIED', 'providerId': 'DAUM', 'providerUserId': 'DtOUv', 'displayName': '한소리', 'description': '', 'commentCount': 138}}

 

 

다음 링크에 해당하는 기사의 댓글이구요.

 

수도권에 강한 비 내린다..호우주의보→경보 격상

[서울=뉴시스] 류인선 기자 = 8일 오후 서울 등 수도권 일부에 내려진 호우주의보가 호우경보로 격상됐다. 중부지방에는 오는 9일까지 강하고 많은 비가 예고돼 대비가 필요하겠다. 기상청은 8일

news.v.daum.net

 

다음 포스팅에 이어서 기사와 댓글을 맵핑하는 것에 대해 알아보겠습니다.