함수 소개
getComment
기사에는 사용자의 댓글들이 있습니다. N2H4 패키지는 셀리늄 등의 브라우저 자동화 도구를 사용하지 않고, 바로 댓글 데이터를 가져올 수 있어 빠르게 수집할 수 있습니다.
dat <- getComment("https://n.news.naver.com/article/374/0000300375")
str(dat)
#> tibble [10 × 90] (S3: tbl_df/tbl/data.frame)
#> $ ticket : chr [1:10] "news" "news" "news" "news" ...
#> $ objectId : chr [1:10] "news374,0000300375" "news374,0000300375" "news374,0000300375" "news374,0000300375" ...
#> $ categoryId : chr [1:10] "*" "*" "*" "*" ...
#> $ templateId : chr [1:10] "default_economy" "view_economy_m1" "default_economy" "default_economy" ...
#> $ commentNo : chr [1:10] "767808853126414854" "767694483818021138" "767691222578888739" "767687129877709044" ...
#> $ parentCommentNo : chr [1:10] "767808853126414854" "767694483818021138" "767691222578888739" "767687129877709044" ...
#> $ replyLevel : int [1:10] 1 1 1 1 1 1 1 1 1 1
#> $ replyCount : int [1:10] 0 0 0 0 0 0 0 0 0 0
#> $ replyAllCount : int [1:10] 0 0 0 0 0 0 0 0 0 0
#> $ replyPreviewNo : logi [1:10] NA NA NA NA NA NA ...
#> $ replyList : logi [1:10] NA NA NA NA NA NA ...
#> $ imageCount : int [1:10] 0 0 0 0 0 0 0 0 0 0
#> $ imageList : logi [1:10] NA NA NA NA NA NA ...
#> $ imagePathList : logi [1:10] NA NA NA NA NA NA ...
#> $ imageWidthList : logi [1:10] NA NA NA NA NA NA ...
#> $ imageHeightList : logi [1:10] NA NA NA NA NA NA ...
#> $ commentType : chr [1:10] "txt" "txt" "txt" "txt" ...
#> $ stickerId : chr [1:10] "" NA NA NA ...
#> $ sticker : logi [1:10] NA NA NA NA NA NA ...
#> $ sortValue : num [1:10] 1.66e+12 1.66e+12 1.66e+12 1.66e+12 1.66e+12 ...
#> $ contents : chr [1:10] "" "양아치 기업. 절대 투자하면 안되는 회사. 입점할때 주변가게들 등쳐먹으려고 쓰레기도 안치우고 주차문제 일으키고 무"| __truncated__ "올리브영서 써보고 괜찮으면 그브랜드 직영가서 사면 할인이벤트도 많고 가격도 저렴" "Ipo 빌드업 ㄷㄷ" ...
#> $ userIdNo : chr [1:10] NA "1YLQY" "md6z" "8pFyW" ...
#> $ exposedUserIp : logi [1:10] NA NA NA NA NA NA ...
#> $ lang : chr [1:10] "ko" "ko" "ko" "ko" ...
#> $ country : chr [1:10] "KR" "KR" "KR" "KR" ...
#> $ idType : chr [1:10] "naver" "naver" "naver" "naver" ...
#> $ idProvider : chr [1:10] "naver" "naver" "naver" "naver" ...
#> $ userName : chr [1:10] "jhjh****" "hanz****" "linu****" "jake****" ...
#> $ userProfileImage : chr [1:10] "" NA "https://phinf.pstatic.net/contact/profile/blog/86/48/linus_ai.jpg" "https://phinf.pstatic.net/contact/20191004_91/1570162662665jCkIX_PNG/profileImage.png" ...
#> $ profileType : chr [1:10] "naver" "naver" "naver" "naver" ...
#> $ modTime : chr [1:10] "2022-08-30T18:21:12+0900" "2022-08-28T12:06:43+0900" "2022-08-28T11:16:05+0900" "2022-08-28T10:12:34+0900" ...
#> $ modTimeGmt : chr [1:10] "2022-08-30T09:21:12+0000" "2022-08-28T03:06:43+0000" "2022-08-28T02:16:05+0000" "2022-08-28T01:12:34+0000" ...
#> $ regTime : chr [1:10] "2022-08-29T17:41:57+0900" "2022-08-28T12:06:43+0900" "2022-08-28T11:16:05+0900" "2022-08-28T10:12:34+0900" ...
#> $ regTimeGmt : chr [1:10] "2022-08-29T08:41:57+0000" "2022-08-28T03:06:43+0000" "2022-08-28T02:16:05+0000" "2022-08-28T01:12:34+0000" ...
#> $ sympathyCount : int [1:10] 0 1 0 1 0 0 2 0 1 2
#> $ antipathyCount : int [1:10] 0 0 0 0 0 0 0 0 3 0
#> $ hideReplyButton : logi [1:10] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> $ status : int [1:10] 1 0 0 0 0 0 0 0 0 0
#> $ mine : logi [1:10] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> $ best : logi [1:10] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> $ mentions : logi [1:10] NA NA NA NA NA NA ...
#> $ toUser : logi [1:10] NA NA NA NA NA NA ...
#> $ userStatus : int [1:10] NA 0 0 0 0 0 0 0 0 0
#> $ categoryImage : logi [1:10] NA NA NA NA NA NA ...
#> $ open : logi [1:10] FALSE FALSE FALSE FALSE FALSE TRUE ...
#> $ levelCode : logi [1:10] NA NA NA NA NA NA ...
#> $ grades : logi [1:10] NA NA NA NA NA NA ...
#> $ sympathy : logi [1:10] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> $ antipathy : logi [1:10] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> $ metaInfo : logi [1:10] NA NA NA NA NA NA ...
#> $ extension : logi [1:10] NA NA NA NA NA NA ...
#> $ translation : logi [1:10] NA NA NA NA NA NA ...
#> $ report : logi [1:10] NA NA NA NA NA NA ...
#> $ middleBlindReport : logi [1:10] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> $ spamInfo : logi [1:10] NA NA NA NA NA NA ...
#> $ userHomepageUrl : logi [1:10] NA NA NA NA NA NA ...
#> $ defamation : logi [1:10] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> $ hiddenByCleanbot : logi [1:10] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> $ score : num [1:10] 0 0 0 0 0 0 0 0 0 0
#> $ ratings : logi [1:10] NA NA NA NA NA NA ...
#> $ following : logi [1:10] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> $ managerLike : logi [1:10] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> $ pick : logi [1:10] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> $ attachmentList :List of 10
#> ..$ : list()
#> ..$ : list()
#> ..$ : list()
#> ..$ : list()
#> ..$ : list()
#> ..$ : list()
#> ..$ : list()
#> ..$ : list()
#> ..$ : list()
#> ..$ : list()
#> $ reference : logi [1:10] NA NA NA NA NA NA ...
#> $ inspectionId : logi [1:10] NA NA NA NA NA NA ...
#> $ userReplied : logi [1:10] NA NA NA NA NA NA ...
#> $ shareCommentLink : logi [1:10] NA NA NA NA NA NA ...
#> $ shareCommentUserName: chr [1:10] "jhjh****" "hanz****" "linu****" "jake****" ...
#> $ visible : logi [1:10] FALSE TRUE TRUE TRUE TRUE TRUE ...
#> $ idNo : chr [1:10] NA "1YLQY" "md6z" "8pFyW" ...
#> $ manager : logi [1:10] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> $ deleted : logi [1:10] TRUE FALSE FALSE FALSE FALSE FALSE ...
#> $ blindReport : logi [1:10] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> $ expose : logi [1:10] FALSE TRUE TRUE TRUE TRUE TRUE ...
#> $ chattingBridge : logi [1:10] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> $ serviceId : chr [1:10] "news" "news" "news" "news" ...
#> $ maskedUserId : chr [1:10] "jhjh****" "hanz****" "linu****" "jake****" ...
#> $ maskedUserName : chr [1:10] "jh****" "ha****" "li****" "ja****" ...
#> $ userBlocked : logi [1:10] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> $ replyNotificationSet: chr [1:10] "OFF" "OFF" "OFF" "OFF" ...
#> $ blind : logi [1:10] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> $ secret : logi [1:10] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> $ profileUserId : logi [1:10] NA NA NA NA NA NA ...
#> $ validateBanWords : logi [1:10] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> $ exposeByCountry : logi [1:10] FALSE TRUE TRUE TRUE TRUE TRUE ...
#> $ containText : logi [1:10] TRUE TRUE TRUE TRUE TRUE TRUE ...
#> $ virtual : logi [1:10] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> $ originalStatus : int [1:10] 1 0 0 0 0 0 0 0 0 0
#> $ anonymous : logi [1:10] FALSE FALSE FALSE FALSE FALSE FALSE ...
데이터 설명
컬럼이 많고, 사용하지 않을 정보들이 많아서 주요 컬럼만 소개합니다.
objectId
: 기사의 고유 아이디입니다. 앞의 3자리는 매체의,
뒤의 10자리는 기사 아이디인 것으로 파악하고 있습니다. 기사 url에 들어간
아이디와 같습니다. commentNo
: 댓글의 고유 아이디입니다.
parentCommentNo
: 현재 댓글이 대댓글인 경우 앞의 댓글의 고유
아이디입니다. reply*
: 대댓글에 대한 정보들입니다.
image*
: 댓글에 이미지가 포함되어 있는 경우 제공하는
정보들입니다. contents
: 댓글 본문 텍스트입니다.
userIdNo
: 사용자 고유 아이디입니다. idNo
와
같습니다. 내부적으로 전체 서비스내에서 사용하는 유일 아이디로 활용하는
것 같습니다. modTime
: 수정 시간입니다. 현재 수정 기능이
막혀있어, 최근 댓글은 모두 입력 시간과 같습니다. regTime
:
입력 시간입니다.
원시 데이터 제공
getComment()
함수는 네이버 뉴스 댓글의 원시 데이터를
제공하기 위해 list
자료형도 지원합니다.
dat <- getComment(
"https://n.news.naver.com/article/374/0000300375",
type = "list"
)
str(dat)
#> List of 7
#> $ success: logi TRUE
#> $ code : chr "1000"
#> $ message: chr "요청을 성공적으로 처리하였습니다."
#> $ lang : chr "ko"
#> $ country: chr "KR"
#> $ result :'data.frame': 1 obs. of 8 variables:
#> ..$ commentList :List of 1
#> .. ..$ :'data.frame': 10 obs. of 90 variables:
#> .. .. ..$ ticket : chr [1:10] "news" "news" "news" "news" ...
#> .. .. ..$ objectId : chr [1:10] "news374,0000300375" "news374,0000300375" "news374,0000300375" "news374,0000300375" ...
#> .. .. ..$ categoryId : chr [1:10] "*" "*" "*" "*" ...
#> .. .. ..$ templateId : chr [1:10] "default_economy" "view_economy_m1" "default_economy" "default_economy" ...
#> .. .. ..$ commentNo : chr [1:10] "767808853126414854" "767694483818021138" "767691222578888739" "767687129877709044" ...
#> .. .. ..$ parentCommentNo : chr [1:10] "767808853126414854" "767694483818021138" "767691222578888739" "767687129877709044" ...
#> .. .. ..$ replyLevel : int [1:10] 1 1 1 1 1 1 1 1 1 1
#> .. .. ..$ replyCount : int [1:10] 0 0 0 0 0 0 0 0 0 0
#> .. .. ..$ replyAllCount : int [1:10] 0 0 0 0 0 0 0 0 0 0
#> .. .. ..$ replyPreviewNo : logi [1:10] NA NA NA NA NA NA ...
#> .. .. ..$ replyList : logi [1:10] NA NA NA NA NA NA ...
#> .. .. ..$ imageCount : int [1:10] 0 0 0 0 0 0 0 0 0 0
#> .. .. ..$ imageList : logi [1:10] NA NA NA NA NA NA ...
#> .. .. ..$ imagePathList : logi [1:10] NA NA NA NA NA NA ...
#> .. .. ..$ imageWidthList : logi [1:10] NA NA NA NA NA NA ...
#> .. .. ..$ imageHeightList : logi [1:10] NA NA NA NA NA NA ...
#> .. .. ..$ commentType : chr [1:10] "txt" "txt" "txt" "txt" ...
#> .. .. ..$ stickerId : chr [1:10] "" NA NA NA ...
#> .. .. ..$ sticker : logi [1:10] NA NA NA NA NA NA ...
#> .. .. ..$ sortValue : num [1:10] 1.66e+12 1.66e+12 1.66e+12 1.66e+12 1.66e+12 ...
#> .. .. ..$ contents : chr [1:10] "" "양아치 기업. 절대 투자하면 안되는 회사. 입점할때 주변가게들 등쳐먹으려고 쓰레기도 안치우고 주차문제 일으키고 무"| __truncated__ "올리브영서 써보고 괜찮으면 그브랜드 직영가서 사면 할인이벤트도 많고 가격도 저렴" "Ipo 빌드업 ㄷㄷ" ...
#> .. .. ..$ userIdNo : chr [1:10] NA "1YLQY" "md6z" "8pFyW" ...
#> .. .. ..$ exposedUserIp : logi [1:10] NA NA NA NA NA NA ...
#> .. .. ..$ lang : chr [1:10] "ko" "ko" "ko" "ko" ...
#> .. .. ..$ country : chr [1:10] "KR" "KR" "KR" "KR" ...
#> .. .. ..$ idType : chr [1:10] "naver" "naver" "naver" "naver" ...
#> .. .. ..$ idProvider : chr [1:10] "naver" "naver" "naver" "naver" ...
#> .. .. ..$ userName : chr [1:10] "jhjh****" "hanz****" "linu****" "jake****" ...
#> .. .. ..$ userProfileImage : chr [1:10] "" NA "https://phinf.pstatic.net/contact/profile/blog/86/48/linus_ai.jpg" "https://phinf.pstatic.net/contact/20191004_91/1570162662665jCkIX_PNG/profileImage.png" ...
#> .. .. ..$ profileType : chr [1:10] "naver" "naver" "naver" "naver" ...
#> .. .. ..$ modTime : chr [1:10] "2022-08-30T18:21:12+0900" "2022-08-28T12:06:43+0900" "2022-08-28T11:16:05+0900" "2022-08-28T10:12:34+0900" ...
#> .. .. ..$ modTimeGmt : chr [1:10] "2022-08-30T09:21:12+0000" "2022-08-28T03:06:43+0000" "2022-08-28T02:16:05+0000" "2022-08-28T01:12:34+0000" ...
#> .. .. ..$ regTime : chr [1:10] "2022-08-29T17:41:57+0900" "2022-08-28T12:06:43+0900" "2022-08-28T11:16:05+0900" "2022-08-28T10:12:34+0900" ...
#> .. .. ..$ regTimeGmt : chr [1:10] "2022-08-29T08:41:57+0000" "2022-08-28T03:06:43+0000" "2022-08-28T02:16:05+0000" "2022-08-28T01:12:34+0000" ...
#> .. .. ..$ sympathyCount : int [1:10] 0 1 0 1 0 0 2 0 1 2
#> .. .. ..$ antipathyCount : int [1:10] 0 0 0 0 0 0 0 0 3 0
#> .. .. ..$ hideReplyButton : logi [1:10] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> .. .. ..$ status : int [1:10] 1 0 0 0 0 0 0 0 0 0
#> .. .. ..$ mine : logi [1:10] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> .. .. ..$ best : logi [1:10] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> .. .. ..$ mentions : logi [1:10] NA NA NA NA NA NA ...
#> .. .. ..$ toUser : logi [1:10] NA NA NA NA NA NA ...
#> .. .. ..$ userStatus : int [1:10] NA 0 0 0 0 0 0 0 0 0
#> .. .. ..$ categoryImage : logi [1:10] NA NA NA NA NA NA ...
#> .. .. ..$ open : logi [1:10] FALSE FALSE FALSE FALSE FALSE TRUE ...
#> .. .. ..$ levelCode : logi [1:10] NA NA NA NA NA NA ...
#> .. .. ..$ grades : logi [1:10] NA NA NA NA NA NA ...
#> .. .. ..$ sympathy : logi [1:10] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> .. .. ..$ antipathy : logi [1:10] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> .. .. ..$ metaInfo : logi [1:10] NA NA NA NA NA NA ...
#> .. .. ..$ extension : logi [1:10] NA NA NA NA NA NA ...
#> .. .. ..$ translation : logi [1:10] NA NA NA NA NA NA ...
#> .. .. ..$ report : logi [1:10] NA NA NA NA NA NA ...
#> .. .. ..$ middleBlindReport : logi [1:10] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> .. .. ..$ spamInfo : logi [1:10] NA NA NA NA NA NA ...
#> .. .. ..$ userHomepageUrl : logi [1:10] NA NA NA NA NA NA ...
#> .. .. ..$ defamation : logi [1:10] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> .. .. ..$ hiddenByCleanbot : logi [1:10] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> .. .. ..$ score : num [1:10] 0 0 0 0 0 0 0 0 0 0
#> .. .. ..$ ratings : logi [1:10] NA NA NA NA NA NA ...
#> .. .. ..$ following : logi [1:10] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> .. .. ..$ managerLike : logi [1:10] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> .. .. ..$ pick : logi [1:10] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> .. .. ..$ attachmentList :List of 10
#> .. .. .. ..$ : list()
#> .. .. .. ..$ : list()
#> .. .. .. ..$ : list()
#> .. .. .. ..$ : list()
#> .. .. .. ..$ : list()
#> .. .. .. ..$ : list()
#> .. .. .. ..$ : list()
#> .. .. .. ..$ : list()
#> .. .. .. ..$ : list()
#> .. .. .. ..$ : list()
#> .. .. ..$ reference : logi [1:10] NA NA NA NA NA NA ...
#> .. .. ..$ inspectionId : logi [1:10] NA NA NA NA NA NA ...
#> .. .. ..$ userReplied : logi [1:10] NA NA NA NA NA NA ...
#> .. .. ..$ shareCommentLink : logi [1:10] NA NA NA NA NA NA ...
#> .. .. ..$ shareCommentUserName: chr [1:10] "jhjh****" "hanz****" "linu****" "jake****" ...
#> .. .. ..$ visible : logi [1:10] FALSE TRUE TRUE TRUE TRUE TRUE ...
#> .. .. ..$ deleted : logi [1:10] TRUE FALSE FALSE FALSE FALSE FALSE ...
#> .. .. ..$ expose : logi [1:10] FALSE TRUE TRUE TRUE TRUE TRUE ...
#> .. .. ..$ idNo : chr [1:10] NA "1YLQY" "md6z" "8pFyW" ...
#> .. .. ..$ manager : logi [1:10] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> .. .. ..$ blindReport : logi [1:10] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> .. .. ..$ chattingBridge : logi [1:10] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> .. .. ..$ serviceId : chr [1:10] "news" "news" "news" "news" ...
#> .. .. ..$ maskedUserId : chr [1:10] "jhjh****" "hanz****" "linu****" "jake****" ...
#> .. .. ..$ maskedUserName : chr [1:10] "jh****" "ha****" "li****" "ja****" ...
#> .. .. ..$ userBlocked : logi [1:10] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> .. .. ..$ replyNotificationSet: chr [1:10] "OFF" "OFF" "OFF" "OFF" ...
#> .. .. ..$ blind : logi [1:10] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> .. .. ..$ secret : logi [1:10] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> .. .. ..$ validateBanWords : logi [1:10] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> .. .. ..$ profileUserId : logi [1:10] NA NA NA NA NA NA ...
#> .. .. ..$ exposeByCountry : logi [1:10] FALSE TRUE TRUE TRUE TRUE TRUE ...
#> .. .. ..$ containText : logi [1:10] TRUE TRUE TRUE TRUE TRUE TRUE ...
#> .. .. ..$ virtual : logi [1:10] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> .. .. ..$ originalStatus : int [1:10] 1 0 0 0 0 0 0 0 0 0
#> .. .. ..$ anonymous : logi [1:10] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> ..$ pageModel :'data.frame': 1 obs. of 17 variables:
#> .. ..$ page : int 1
#> .. ..$ pageSize : int 10
#> .. ..$ indexSize : int 10
#> .. ..$ startRow : int 1
#> .. ..$ endRow : int 10
#> .. ..$ totalRows : int 20
#> .. ..$ startIndex : int 0
#> .. ..$ totalPages : int 2
#> .. ..$ firstPage : int 1
#> .. ..$ prevPage : int 0
#> .. ..$ nextPage : int 2
#> .. ..$ lastPage : int 2
#> .. ..$ current : logi NA
#> .. ..$ threshold : logi NA
#> .. ..$ moveToLastPage: logi FALSE
#> .. ..$ moveToComment : logi FALSE
#> .. ..$ moveToLastPrev: logi FALSE
#> ..$ morePage :'data.frame': 1 obs. of 4 variables:
#> .. ..$ prev : chr "05u05itoicn46"
#> .. ..$ next : chr "05tybxto5pvdy"
#> .. ..$ start: chr "05u05itoicn46"
#> .. ..$ end : chr "05ty4ck9xjzrp"
#> ..$ exposureConfig:'data.frame': 1 obs. of 2 variables:
#> .. ..$ reason: logi NA
#> .. ..$ status: chr "COMMENT_ON"
#> ..$ count :'data.frame': 1 obs. of 8 variables:
#> .. ..$ comment : int 20
#> .. ..$ reply : int 5
#> .. ..$ exposeCount : int 16
#> .. ..$ delCommentByUser : int 4
#> .. ..$ delCommentByMon : int 0
#> .. ..$ blindCommentByUser: int 0
#> .. ..$ blindReplyByUser : int 0
#> .. ..$ total : int 25
#> ..$ listStatus : chr "all"
#> ..$ sort : chr "NEW"
#> ..$ bestList :List of 1
#> .. ..$ : list()
#> $ date : chr "2024-02-25T16:12:06+0000"
#> - attr(*, "row.names")= int 1
getAllComment
getComment()
함수는 최대 100개의 댓글을 가져올 수
있습니다. 그래서 모든 데이터를 가져오기 위해서는 여러번 요청해야 합니다.
N2H4 패키지는 편의함수인 getAllComment()
을
제공합니다.
dat <- getComment("https://n.news.naver.com/mnews/article/088/0000772480?sid=100")
nrow(dat)
#> [1] 10
dat <- getComment(
"https://n.news.naver.com/mnews/article/088/0000772480?sid=100",
count = 100
)
nrow(dat)
#> [1] 100
dat <- getAllComment("https://n.news.naver.com/mnews/article/088/0000772480?sid=100")
nrow(dat)
#> [1] 199
getCommentHistory
댓글 사용자의 다른 댓글들을 수집하는 함수입니다. 우선
getComment()
함수를 이용해 추가로 수집하고자 하는 사용자의
기사내 댓글아이디(commentNo
)를 확보합니다.
turl <- "https://n.news.naver.com/mnews/article/088/0000772480?sid=100"
dat <- getComment(turl)
nrow(dat)
#> [1] 10
str(dat[1,c("commentNo", "idNo", "userName", "contents")])
#> tibble [1 × 4] (S3: tbl_df/tbl/data.frame)
#> $ commentNo: chr "767687080955347249"
#> $ idNo : chr "aPD2N"
#> $ userName : chr "rn65****"
#> $ contents : chr "국힘과 보수 꼭 보시길 동영상 뻐꾸기 탁란 잔혹한 본성을 보시길"
getCommentHistory()
함수는 댓글이 달린 본기사주소와
commentNo
가 모두 필요합니다.
dat <- getCommentHistory(turl, dat$commentNo[1])
str(dat)
#> tibble [10 × 98] (S3: tbl_df/tbl/data.frame)
#> $ ticket : chr [1:10] "news" "news" "news" "news" ...
#> $ objectId : chr [1:10] "news127,0000034579" "news421,0006425048" "news021,0002538562" "news032,0003182769" ...
#> $ categoryId : chr [1:10] "*" "*" "*" "*" ...
#> $ templateId : chr [1:10] "view_society" "view_politics_m2" "view_politics_m2" "view_society" ...
#> $ commentNo : chr [1:10] "803156561043128494" "773549075625673110" "773548819622134194" "773532228314464415" ...
#> $ parentCommentNo : chr [1:10] "803156561043128494" "773549075625673110" "773548819622134194" "773531837237559435" ...
#> $ replyLevel : int [1:10] 1 1 1 2 1 1 2 1 1 1
#> $ replyCount : int [1:10] 0 0 0 0 0 0 0 0 0 0
#> $ replyAllCount : int [1:10] 0 0 0 0 0 0 0 0 0 0
#> $ replyPreviewNo : logi [1:10] NA NA NA NA NA NA ...
#> $ replyList : logi [1:10] NA NA NA NA NA NA ...
#> $ imageCount : int [1:10] 0 0 0 0 0 0 0 0 0 0
#> $ imageList : logi [1:10] NA NA NA NA NA NA ...
#> $ imagePathList : logi [1:10] NA NA NA NA NA NA ...
#> $ imageWidthList : logi [1:10] NA NA NA NA NA NA ...
#> $ imageHeightList : logi [1:10] NA NA NA NA NA NA ...
#> $ objectUrl : chr [1:10] "https://n.news.naver.com/mnews/article/127/0000034579?sid1=001" "https://n.news.naver.com/mnews/article/421/0006425048?sid1=001" "https://n.news.naver.com/mnews/article/021/0002538562?sid1=001" "https://n.news.naver.com/mnews/article/032/0003182769?sid1=001" ...
#> $ commentType : chr [1:10] "txt" "txt" "txt" "txt" ...
#> $ stickerId : logi [1:10] NA NA NA NA NA NA ...
#> $ sticker : logi [1:10] NA NA NA NA NA NA ...
#> $ sortValue : num [1:10] 1.69e+12 1.67e+12 1.67e+12 1.67e+12 1.67e+12 ...
#> $ contents : chr [1:10] "공산당 싫다하는것이 조상님에 효도" "공산당들은 애도하는 것 못 보았다 공산당답게 너내들 끼리 놀아라" "보이지 마라 감방 갈 놈이 나데지 마라" "위장 암살 자살자 공산당 길잡이" ...
#> $ userIdNo : chr [1:10] "aPD2N" "aPD2N" "aPD2N" "aPD2N" ...
#> $ exposedUserIp : logi [1:10] NA NA NA NA NA NA ...
#> $ lang : chr [1:10] "ko" "ko" "ko" "ko" ...
#> $ country : chr [1:10] "KR" "KR" "KR" "KR" ...
#> $ idType : chr [1:10] "naver" "naver" "naver" "naver" ...
#> $ idProvider : chr [1:10] "naver" "naver" "naver" "naver" ...
#> $ userName : chr [1:10] "사천왕" "사천왕" "사천왕" "사천왕" ...
#> $ userProfileImage : logi [1:10] NA NA NA NA NA NA ...
#> $ profileType : chr [1:10] "naver" "naver" "naver" "naver" ...
#> $ modTime : chr [1:10] "2023-09-14T18:10:36+0900" "2022-10-30T14:41:56+0900" "2022-10-30T14:37:58+0900" "2022-10-30T10:20:26+0900" ...
#> $ modTimeGmt : chr [1:10] "2023-09-14T09:10:36+0000" "2022-10-30T05:41:56+0000" "2022-10-30T05:37:58+0000" "2022-10-30T01:20:26+0000" ...
#> $ regTime : chr [1:10] "2023-09-14T18:10:36+0900" "2022-10-30T14:41:56+0900" "2022-10-30T14:37:58+0900" "2022-10-30T10:20:26+0900" ...
#> $ regTimeGmt : chr [1:10] "2023-09-14T09:10:36+0000" "2022-10-30T05:41:56+0000" "2022-10-30T05:37:58+0000" "2022-10-30T01:20:26+0000" ...
#> $ sympathyCount : int [1:10] 0 0 2 0 0 1 1 0 0 0
#> $ antipathyCount : int [1:10] 0 0 1 0 0 0 0 1 0 0
#> $ hideReplyButton : logi [1:10] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> $ status : int [1:10] 0 0 0 0 0 0 0 0 0 0
#> $ mine : logi [1:10] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> $ best : logi [1:10] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> $ mentions : logi [1:10] NA NA NA NA NA NA ...
#> $ toUser : logi [1:10] NA NA NA NA NA NA ...
#> $ userStatus : int [1:10] 0 0 0 0 0 0 0 0 0 0
#> $ categoryImage : logi [1:10] NA NA NA NA NA NA ...
#> $ open : logi [1:10] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> $ levelCode : logi [1:10] NA NA NA NA NA NA ...
#> $ grades : logi [1:10] NA NA NA NA NA NA ...
#> $ sympathy : logi [1:10] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> $ antipathy : logi [1:10] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> $ metaInfo :'data.frame': 10 obs. of 15 variables:
#> ..$ categoryName : chr [1:10] "사회" "정치" "정치" "사회" ...
#> ..$ publisherCode : chr [1:10] "127" "421" "021" "032" ...
#> ..$ publisherName : chr [1:10] "기자협회보" "뉴스1" "문화일보" "경향신문" ...
#> ..$ title : chr [1:10] "김용진 대표 \"뉴스타파, 그렇게 만만한 조직 아니다\"" "민주당, '이태원 참사'에 오늘 긴급 최고위 소집…\"힘 모으겠다\"" "이재명, “민주당 함께 힘 모으겠다. 사고 수습에 총력”" "‘이태원 핼러윈’ 사고 149명 사망자, 서울 시내 36개 병원 이송…실종 신고 355건 접수" ...
#> ..$ imageUrl : chr [1:10] "https://imgnews.pstatic.net/image/origin/127/2023/09/14/34579.jpg" "https://imgnews.pstatic.net/image/origin/421/2022/10/30/6425048.jpg" "https://imgnews.pstatic.net/image/origin/021/2022/10/30/2538562.jpg" "https://imgnews.pstatic.net/image/origin/032/2022/10/30/3182769.jpg" ...
#> ..$ source : chr [1:10] "&lsquo김만배 음성 파일&rsquo 보도와 관련한 의혹을 수사 중인 검찰이 14일 뉴스타파와 JTBC에 대한 압수수색을 시도"| __truncated__ "이재명 더불어민주당 대표가 26일 서울 여의도 국회에서 열린 최고위원회의에서 모두 발언을 하고 있다. 2022.10.26/뉴"| __truncated__ "더불어민주당 이재명 대표가 26일 국회에서 열린 최고위원회의에서 발언하고 있다 국회사진기자단 이재명, 이태원 참사"| __truncated__ "30일 시민들이 서울 용산구 한남동 주민센터에서 이태원 핼러윈 인명사고 관련 실종자 접수를 하고 대기하고 있다. 권"| __truncated__ ...
#> ..$ url : chr [1:10] "https://n.news.naver.com/mnews/article/127/0000034579?sid1=001" "https://n.news.naver.com/mnews/article/421/0006425048?sid1=001" "https://n.news.naver.com/mnews/article/021/0002538562?sid1=001" "https://n.news.naver.com/mnews/article/032/0003182769?sid1=001" ...
#> ..$ regDate : num [1:10] 1.69e+12 1.67e+12 1.67e+12 1.67e+12 1.67e+12 ...
#> ..$ ticket : chr [1:10] "news" "news" "news" "news" ...
#> ..$ statCategoryName: chr [1:10] "사회" "정치" "정치" "사회" ...
#> ..$ commonStatsParam:'data.frame': 10 obs. of 0 variables
#> ..$ commentCount : int [1:10] 207 65 599 211 1288 1142 162 455 455 1264
#> ..$ parentContentId : logi [1:10] NA NA NA NA NA NA ...
#> ..$ parentTitle : logi [1:10] NA NA NA NA NA NA ...
#> ..$ escapedTitle : chr [1:10] "김용진 대표 \"뉴스타파, 그렇게 만만한 조직 아니다\"" "민주당, '이태원 참사'에 오늘 긴급 최고위 소집…\"힘 모으겠다\"" "이재명, “민주당 함께 힘 모으겠다. 사고 수습에 총력”" "‘이태원 핼러윈’ 사고 149명 사망자, 서울 시내 36개 병원 이송…실종 신고 355건 접수" ...
#> $ extension : logi [1:10] NA NA NA NA NA NA ...
#> $ translation : logi [1:10] NA NA NA NA NA NA ...
#> $ report : logi [1:10] NA NA NA NA NA NA ...
#> $ middleBlindReport : logi [1:10] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> $ spamInfo : logi [1:10] NA NA NA NA NA NA ...
#> $ userHomepageUrl : logi [1:10] NA NA NA NA NA NA ...
#> $ defamation : logi [1:10] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> $ hiddenByCleanbot : logi [1:10] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> $ score : num [1:10] 0 0 0 0 0 0 0 0 0 0
#> $ ratings : logi [1:10] NA NA NA NA NA NA ...
#> $ following : logi [1:10] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> $ managerLike : logi [1:10] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> $ pick : logi [1:10] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> $ attachmentList :List of 10
#> ..$ : list()
#> ..$ : list()
#> ..$ : list()
#> ..$ : list()
#> ..$ : list()
#> ..$ : list()
#> ..$ : list()
#> ..$ : list()
#> ..$ : list()
#> ..$ : list()
#> $ reference : logi [1:10] NA NA NA NA NA NA ...
#> $ inspectionId : logi [1:10] NA NA NA NA NA NA ...
#> $ userReplied : logi [1:10] NA NA NA NA NA NA ...
#> $ shareCommentLink : logi [1:10] NA NA NA NA NA NA ...
#> $ shareCommentUserName: chr [1:10] "사천왕" "사천왕" "사천왕" "사천왕" ...
#> $ objectTitle : chr [1:10] "김용진 대표 \"뉴스타파, 그렇게 만만한 조직 아니다\"" "민주당, '이태원 참사'에 오늘 긴급 최고위 소집…\"힘 모으겠다\"" "이재명, “민주당 함께 힘 모으겠다. 사고 수습에 총력”" "‘이태원 핼러윈’ 사고 149명 사망자, 서울 시내 36개 병원 이송…실종 신고 355건 접수" ...
#> $ objectImage : chr [1:10] "https://imgnews.pstatic.net/image/origin/127/2023/09/14/34579.jpg" "https://imgnews.pstatic.net/image/origin/421/2022/10/30/6425048.jpg" "https://imgnews.pstatic.net/image/origin/021/2022/10/30/2538562.jpg" "https://imgnews.pstatic.net/image/origin/032/2022/10/30/3182769.jpg" ...
#> $ objectSource : chr [1:10] "&lsquo김만배 음성 파일&rsquo 보도와 관련한 의혹을 수사 중인 검찰이 14일 뉴스타파와 JTBC에 대한 압수수색을 시도"| __truncated__ "이재명 더불어민주당 대표가 26일 서울 여의도 국회에서 열린 최고위원회의에서 모두 발언을 하고 있다. 2022.10.26/뉴"| __truncated__ "더불어민주당 이재명 대표가 26일 국회에서 열린 최고위원회의에서 발언하고 있다 국회사진기자단 이재명, 이태원 참사"| __truncated__ "30일 시민들이 서울 용산구 한남동 주민센터에서 이태원 핼러윈 인명사고 관련 실종자 접수를 하고 대기하고 있다. 권"| __truncated__ ...
#> $ objectCategoryName : chr [1:10] "사회" "정치" "정치" "사회" ...
#> $ objectPublisherName : chr [1:10] "기자협회보" "뉴스1" "문화일보" "경향신문" ...
#> $ objectRegDate : num [1:10] 1.69e+12 1.67e+12 1.67e+12 1.67e+12 1.67e+12 ...
#> $ objectRegTime : chr [1:10] "2023-09-14T13:20:01+0900" "2022-10-30T09:19:01+0900" "2022-10-30T09:31:15+0900" "2022-10-30T11:43:03+0900" ...
#> $ visible : logi [1:10] TRUE TRUE TRUE TRUE TRUE TRUE ...
#> $ idNo : chr [1:10] "aPD2N" "aPD2N" "aPD2N" "aPD2N" ...
#> $ manager : logi [1:10] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> $ deleted : logi [1:10] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> $ blindReport : logi [1:10] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> $ expose : logi [1:10] TRUE TRUE TRUE TRUE TRUE TRUE ...
#> $ serviceId : chr [1:10] "news" "news" "news" "news" ...
#> $ chattingBridge : logi [1:10] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> $ maskedUserId : chr [1:10] "rn65****" "rn65****" "rn65****" "rn65****" ...
#> $ maskedUserName : chr [1:10] "사천****" "사천****" "사천****" "사천****" ...
#> $ userBlocked : logi [1:10] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> $ replyNotificationSet: chr [1:10] "OFF" "OFF" "OFF" "OFF" ...
#> $ blind : logi [1:10] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> $ secret : logi [1:10] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> $ validateBanWords : logi [1:10] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> $ profileUserId : logi [1:10] NA NA NA NA NA NA ...
#> $ exposeByCountry : logi [1:10] TRUE TRUE TRUE TRUE TRUE TRUE ...
#> $ containText : logi [1:10] TRUE TRUE TRUE TRUE TRUE TRUE ...
#> $ virtual : logi [1:10] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> $ originalStatus : int [1:10] 0 0 0 0 0 0 0 0 0 0
#> $ anonymous : logi [1:10] FALSE FALSE FALSE FALSE FALSE FALSE ...