728x90
소개
지난 포스팅에서 간단하게 태그에 접근해서 데이터를 추출하고, 범위를 구하는 방법을 알아보았습니다.
이번 포스팅에서는 조금 더 들어가서 자바스크립트에서 다른 경로(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}}
다음 링크에 해당하는 기사의 댓글이구요.
다음 포스팅에 이어서 기사와 댓글을 맵핑하는 것에 대해 알아보겠습니다.
'Crawling > Basic' 카테고리의 다른 글
파이썬 크롤링 : 날짜별로 데이터 수집을 위한 날짜연산 (0) | 2020.08.10 |
---|---|
파이썬 다음-뉴스 댓글 크롤링 하기 -3 : 인증 (0) | 2020.08.09 |
파이썬 다음-뉴스 크롤링 하기 -1 (0) | 2020.08.07 |
파이썬 크롤링할 범위를 구하는 방법 (0) | 2020.08.07 |
아이피 우회하여 크롤링하기 tor / requests[socks] (0) | 2020.08.03 |