[R lang 크롤링] (R) 네이버금융에서 종목토론방 크롤링

(R) 네이버금융에서 종목토론방 크롤링

 
프로필

2018. 8. 16. 0:39

 

 

R에서 크롤링을 하는 방법을 포스팅 하겠습니다. 크롤링을 사용하면 자신이 필요한 많은 데이터를 인터넷으로

 

부터 긁어올 수 있습니다. 긁어올 데이터는 주가 데이터도 될 수 있고, 텍스트 데이터 등 여러가지가 있는데 오늘

 

은 텍스트 데이터를 긁어오는 방법을 포스팅하겠습니다.

 

크롤링을 할 사이트는 네이버 금융입니다.

https://finance.naver.com/

 

 

네이버 금융에 들어가서 삼성전자를 검색하시고 들어가면 나오는 창입니다. 여기서 아래의 종목토론실로 가보겠습니다.

오늘도 평화로운 종목토론실이네요. 사실 읽어보면 뻘글이 많아서 크롤링을 하는게 의미가 있나 싶을 수도 있지만 이거는 예시이니까요 가끔 읽어보면 재밌고 주식 관련 드립 배우기에는 좋습니다. 첫 페이지만 봐도상당히 정치적인 글들이 많이 보이는데 저의 의도와는 상관없음을 알려드립니다.

1. 크롤링할 데이터 정하기
크롤링을 본격적으로 하기 전에 무엇을 크롤링 할 것인지 정해야 합니다. 저는 앞에서 이미 종목토론실의 글들을 긁어오기로 했으니 종목토론실 글들을 확인해 보겠습니다.
종목 토론실을 확인해보니 한 페이지에 네티즌들이 쓴 글의 제목들이 있고 제목을 클릭하면 본문으로 이동할 수 있게 되어있네요
본문까지 긁기는 힘들고 제목들만 긁어와 보겠습니다. 제목만 가지고 뭘해? 라고 생각하실 수 있지만 실제로 종목토론방의 제목들을 긁어 텍스트마이닝을 해서 긍정/부정의 글로 분류해 주가와 상관관계를 분석하는 방법들이 많이 사용되고 있습니다.

댓글창들을 보니 한 페이지에 20개의 글들이 모아져 있네요. 여기서 주목해야하는 점이 2페이지로 넘어간 순간 주소창이 바뀌었다는 점입니다. 

https://finance.naver.com/item/board.nhn?code=005930
-> https://finance.naver.com/item/board.nhn?code=005930&page=2
에서 이렇게 바뀌었는데 다시 1페이지로 돌아가보면 원래 없던 &page=1이 붙어있음을 알 수 있습니다.
여기서 알아야하는 점은
"아 페이지의 주소가 finance.naver.com/item/board.nhn?code=005930&page= 다음에 해당 페이지의 번호가 오구나! "
만 알아채면 됩니다.
 

2. html 구조살피기

크롤링을 하기 위해서 html의 구조를 살펴봐야합니다. 컴퓨터에게 크롤링할 사이트에서 00를 긁어와라고 명령을 하는 과정입니다.  컴퓨터 자판의 F12키를 누르면 해당 사이트의 html구조를 볼 수 있습니다.

 

html 창이 옆에 떴으면 가장 위쪽 항목에서 Elements를 클릭하세요

그 다음 Elements 왼쪽에 화살표모양 버튼을 클릭하고 다시 종목 토론실의 글들에 커서를 옮겨놓기만 하면 html값들이 떠오르는 것을 볼 수 있습니다.

그리고 가장 첫머리의 글을 클릭해보겠습니다. 그러면 오른쪽 html 창에서 해당 글의 값이 선택이 됩니다. html 구조에 대해 공부를 하면 쉽게 이해할 수 있지만 이또한 전문적인 공부를 해야합니다. 간략하게 말하면 해당 사이트의 구조는 마치 나무와 같이 줄기에서 가지로 이어나가는 구조로 생겼다고 생각하면 됩니다.

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

html 창을 가장 위로부터 보면 영어로 된 node 값의 앞에 삼각형이 있습니다. 삼각형이 오른쪽으로 보고 있으면 펼쳐지지 않은 것, 아래로 보고 있으면 펼쳐져 있는 것이고, 하위 node 값들이 들어쓰기를 하고 다시 정렬되어 있네요. 즉 body로 시작하는 node값이 나무의 몸통이고 아래의 script, div로 시작하는 것들이 몸통에서 갈라져나오는 가지인 것입니다.

우리가 긁어와야할 데이터는 종목토론실의 제목이므로 다시 elements옆의 화살표를 클릭해 첫머리 제목을 클릭합니다.
그러면 위에 a라는 검은색 창이 작게 뜨는 것이 보이네요 오른쪽의 html 창에서는 해당 데이터의 값이 파랗게 표시됩니다.
바로 밑의 제목도 클릭해보면 a라고 똑같이 뜨는 것을 확인할 수 있습니다.
즉 저기에 적힌 제목들은 모두 a라는 html node값으로 설정되어 있는 것이죠.
그말은 코딩을 할 때 컴퓨터에게 a를 다 데리고와라고 명령하면 친절하게 a값을 다 가지고 온다는 말입니다.

하지만 여기서 한 가지 문제가 발생하는데 a를 데려오라고 하면 데리고 오는데 a가 너무 많다는 것입니다. 쉽게 말하자면 우리가 찾는 김민수는 특정인 한 명인데 서울에 사는 김민수를 데려와라고 하면 대략 몇 만 명이 될 수도 있는 김민수씨를 다 데려오는 것이죠
이를 방지하기 위해 00의 아들 김민수 혹은 00동에 사는 김민수라고 상위 node값을 같이 찾아주면 우리가 원하는 a값을 가져올 수 있습니다.

다시 화살표를 클릭해서 제목에 올려둡니다 그런데 제목에 정확히 커서를 대지않고 살짝 옆으로 움직이면 큰 테두리에 불이 들어오는 것을 확인할 수 있습니다.
오른쪽의 html창에서 확인하면 아까 확인한 a값의 상위 node값에 표시가 되는 것을 확인할 수 있네요.
정리하자면 a값은 td.title 의 a값이 우리가 필요한 데이터의 정확한 node 값인 것이죠

3. R로 코딩하기
1) 로직 이해하기
이제 크롤링을 하기 전 데이터의 구조를 파악했으니 진짜 크롤링을 해보겠습니다.

rvest 라이브러리를 사용합니다. 라이브러리가 없다면 설치하시고 불러오시면 됩니다.
url에는 삼성전자의 종목토론실 주소를 입력합니다.
그런 다음 read_html 코드를 사용하여 html 값을 읽어온 뒤 page에 저장합니다. encoding은 euc-kr로 합니다.

다음으로 page에 저장한 html값을 node를 기준으로 읽어오는 과정인데, 아까 앞에서 html을 보고 구했던 node값을 입력하면 됩니다. 첫번째 코드는 세부 node값을 순서대로 모두 입력한 것입니다. 예를 들면 대한민국 서울특별시 강남구 삼성동 00아파트에 사는 김민수라고 상세하게 입력하는 것이죠.
두번째 코드는 아까 우리가 확인한 값으로 00아파트에 사는 김민수라고 짧게 입력한 것입니다. 두번째 코드만 입력해도 우리가 원하는 데이터를 얻을 수 있기 때문에 굳이 첫번째 처럼 노가다로 입력하지 않아도 되지만 이런 방법도 있다고 알려드리기 위한 것이니 무시하셔도 좋습니다.

다음으로 html_attr을 이용해 page2에서 필요한 데이터를 가져옵니다. 이 코드 역시 두 가지를 입력했는데, 모두 필요한 것이 아니라 설명을 위한 것입니다. html_attrs와 html_attr의 차이를 보여드리기 위해서입니다. html_attrs를 사용하면 href, onclick, title이라는 것들이 함께 표출되는 것을 아래 표에서 볼 수 있습니다. 아 가뜩이나 머리아픈데 얘네는 또 뭔가? 하실 수 있지만... 아까 위에서 본 종목토론실 사이트의 html 값을 기억하시나요? 거기에 적힌 모든 값들이 다 딸려온 것입니다. 표를 다시보니 우리가 필요한 데이터는 title에 예쁘게 정리되어 있는 것을 볼 수 있네요.
그래서 두 번째 코드인 html_attr를 사용하면 title값만 가져올 수 있습니다. html_attr은 html_attrs와 다르게 변수 page2와 'title'을 동시에 입력해야 합니다. 설명이 복잡할 수 있지만 크롤링을 하는 방법은 공식처럼 정형화 되어있지 않아 html_attrs를 사용해 구조를 확실히 파악하면 다른 데이터도 쉽게 받을 수 있기 때문에 알려드렸습니다.

title만 골라낸 page3를 데이터프레임의 형태로 page4에 저장합니다. 그러면 제목들이 보기좋게 분류되어 있는 것을 볼 수 있습니다. (뒤에 나오는 for문 에서는 txt파일로 만드는데 불편하여 데이터프레임을 사용하지 않았습니다.)
하지만 여기서 끝이 아닙니다. 이제 우리는 종목토론실에서 1페이지만 긁어온 것일 뿐이기 때문입니다. 이 작업을 자동으로 해주기 위해서 지금까지 한 로직을 for문을 짜서 만들면 편하게 정리할 수 있습니다.

2) For문 사용

for문으로 위에서 했던 코드를 반복시키는 코딩입니다. 네이버금융의 종목토론실의 주소의 끝에 page 번호가 온다는 것을 사용하여 for문을 짜면 url을 수고롭게 직접 변경시키지 않아도 자동으로 변경시킬 수 있습니다. 그러기 위해서는 paste 함수를 사용해 위와같이 입력해야합니다. page=다음 숫자가 오는 부분을 i로 바꾸면 for문이 도는 동안 i가 자동으로 입력되기 때문이죠.
page5를 먼저 빈 리스트로 만들고 html에서 node값을 따오고, 여기서 title에 해당하는 값만 골라서 page5의 i번째 리스트에 넣는다는 의미입니다.
갑작스럽게 %>%라는 기호가 나와서 당황하실 수 있습니다. 이 표시는 코드의 줄을 줄여주기위해  사용하는 것으로 page5 <- 라는 화살표로 입력하기 전에 %>%가 우선적으로 사용됩니다.
마지막으로 for문을 사용할 때 1부터 7086까지를 범위로 사용했는데, 이 이유는 종목토론실의 맨 끝페이지가 7086번이기 때문입니다. (저는 지금 해보니깐 7086까지 안가서 오류가 뜨네요 함수에 적용된 버퍼가 너무 작아서 그런 것 같습니다. 해결방법은 잘 ㅠㅠ)

작업한 내용을 확인하기 위해서 txt파일로 저장하겠습니다. unlist함수를 사용하면 행별로 줄을 바꿔서 저장해줍니다.

작성된 txt파일을 확인해보았습니다. 원하는 데이터를 추출하는데 성공했습니다!

아래는 전체적으로 보여드리는 코드입니다.

읽어주셔서 감사합니다. 질문이나 지적하실 부분은 댓글로 해주시기 바랍니다.

 

 

[출처] https://m.blog.naver.com/jk940/221339612873

 

 

 

 

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
공지 오라클 기본 샘플 데이터베이스 졸리운_곰 2014.01.02 86034
공지 [SQL컨셉] 서적 "SQL컨셉"의 샘플 데이타 베이스 SAMPLE DATABASE of ORACLE 가을의 곰을... 2013.02.10 78562
공지 [G_SQL] Sample Database 가을의 곰을... 2012.05.20 95291
1064 [R lang 크롤링] (R) 종목토론실 텍스트마이닝하여 시각화하기 file 졸리운_곰 2023.12.10 2324
» [R lang 크롤링] (R) 네이버금융에서 종목토론방 크롤링 file 졸리운_곰 2023.12.10 1277
1062 [통계 R 언어] [ R ] pipe operator %>% 의 의미 - magrittr 패키지 졸리운_곰 2023.12.10 1185
1061 [R lang 크롤링] [R 코드] 웹사이트 크롤링 졸리운_곰 2023.12.10 1314
1060 [R lang 크롤링] R - 크롤링 file 졸리운_곰 2023.12.10 1742
1059 [통계 R 언어] [Rtips] 불리는 패키지가 없습니다 해결 방법 file 졸리운_곰 2023.12.10 1379
1058 [통계 R 언어] 패키지 설치 에러시 ERROR configuration failed for package RCurl during installation of DESeq file 졸리운_곰 2023.12.10 1203
1057 [R lang 크롤링] 최대한 친절하게 쓴 R 크롤러 만들기 file 졸리운_곰 2023.12.10 1496
1056 [데이터 수집 및 전처리] 주식 전종목 어떻게 불러올까? 거래소 종목 불러오기 file 졸리운_곰 2023.12.09 1701
1055 [데이터 수집 및 전처리] [Python/파이썬]네이버증권API 활용 - 회사명, 종목코드 받아오기 file 졸리운_곰 2023.12.08 1509
1054 [데이터 수집 및 전처리] 네이버 금융(차트)에서 주가 갈무리(크롤링)하기 file 졸리운_곰 2023.12.08 1495
1053 [데이터 수집 및 전처리] 네이버 증권에서 일봉, 주봉 데이터 가져오기 file 졸리운_곰 2023.12.08 1499
1052 [oracle] Pro*C 사용 방법 안내 (Ver 0.9) 이 문서는 오라클의 Pro*C/C++ Precompiler Programmer's Guide.pdf 문서의 일부분을. 정리한 것입니다. file 졸리운_곰 2023.09.08 1490
1051 [oracle] [pro-c] pro*C (프로씨) 프로그래밍 졸리운_곰 2023.09.08 2794
1050 [oracle] [pro-c] Pro*C 프로그램 개요 졸리운_곰 2023.09.08 1077
1049 [oracle] [Pro*C] Pro*C 소개와 기본 특징 및 오류 진단 졸리운_곰 2023.09.08 1153
1048 [oracle] [PRO*C] 거의 모든 예제가 다 있다. 졸리운_곰 2023.09.08 919
1047 [MySQL workbench] [MySQLWorkbench] 테이블 복사하기 file 졸리운_곰 2023.08.14 1083
1046 [MySQL Workbench] [MYSQL] WORKBENCH로 트리거 설정하기 file 졸리운_곰 2023.08.14 967
1045 [MySQL] 트리거 (종류, 사용법, 삭제, 예제) 졸리운_곰 2023.07.19 1204
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED