library(httr)
library(rvest)
res <- GET('http://news.naver.com/main/list.nhn?mode=LSD&mid=sec&sid1=001')
htxt <- html(res)
link <- html_nodes(htxt, 'div.list_body a')
article.href <- unique(html_attr(link, 'href'))
article.href
## [1] "http://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=001&oid=366&aid=0000279912"
## [2] "http://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=001&oid=236&aid=0000125547"
## [3] "http://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=001&oid=213&aid=0000728746"
## [4] "http://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=001&oid=091&aid=0004878138"
## [5] "http://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=001&oid=022&aid=0002876268"
## [6] "http://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=001&oid=410&aid=0000258345"
## [7] "http://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=001&oid=077&aid=0002943149"
## [8] "http://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=001&oid=077&aid=0002943148"
## [9] "http://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=001&oid=077&aid=0002943147"
## [10] "http://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=001&oid=016&aid=0000796614"
## [11] "http://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=001&oid=015&aid=0003387365"
## [12] "http://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=001&oid=015&aid=0003387364"
## [13] "http://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=001&oid=076&aid=0002774751"
## [14] "http://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=001&oid=079&aid=0002732611"
## [15] "http://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=001&oid=079&aid=0002732610"
## [16] "http://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=001&oid=023&aid=0003013277"
## [17] "http://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=001&oid=023&aid=0003013276"
## [18] "http://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=001&oid=477&aid=0000011396"
## [19] "http://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=001&oid=018&aid=0003306877"
## [20] "http://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=001&oid=018&aid=0003306876"
이 다음에 for 루프를 사용해서 링크에 있는 것들을 뽑아낸다.
for (href in article.href) { GET(href) }
h <- html('http://gae9.com/trend/1DRlnSN7k1nb#!hot')
imgs <- html_nodes(h, 'div.trend-post-content img')
img.src <- html_attr(imgs, 'src')
img.src <- img.src[grep('ssproxy', img.src)]
for (src in 1:length(img.src))
{
res <- GET(img.src[src])
writeBin(content(res, 'raw'), sprintf('%03d.jpg', src))
}
strptime('2015.06.09 23:15', '%Y.%m.%d %H:%M')
## [1] "2015-06-09 23:15:00 KST"
strptime('2015-06-09 23:15', '%Y-%m-%d %H:%M')
## [1] "2015-06-09 23:15:00 KST"
strptime('2015.06.09 23:15', '%Y.%m.%d %H:%M', 'UTC')
## [1] "2015-06-09 23:15:00 UTC"
t <- strptime('2015.06.09 23:15', '%Y.%m.%d %H:%M')
ls(t)
## [1] "gmtoff" "hour" "isdst" "mday" "min" "mon" "sec"
## [8] "wday" "yday" "year" "zone"
attributes(t)
## $names
## [1] "sec" "min" "hour" "mday" "mon" "year" "wday"
## [8] "yday" "isdst" "zone" "gmtoff"
##
## $class
## [1] "POSIXlt" "POSIXt"
t$year
## [1] 115
t$mon ## 0월이 1월임
## [1] 5
t2 <- t
strftime(t, '%Y/%m/%d %H:%M')
## [1] "2015/06/09 23:15"
strftime(t, '%y/%m/%d %H:%M')
## [1] "15/06/09 23:15"
strftime(t, '%m/%d/%Y %H:%M')
## [1] "06/09/2015 23:15"
strftime(t, '%Y%m%d')
## [1] "20150609"
# https://en.wikipedia.org/wiki/List_of_tz_database_time_zones 참고
comment.url <- 'http://www.inven.co.kr/common/board/comment.xml.php?dummy=1433931866095'
comment <- POST(comment.url,
body=list(
comeidx=2152,
articlecode=19094,
sortorder='date',
act='list',
out='xml',
replynick='',
replyidx=0))
x <- xml(comment)
xml_text(xml_nodes(x, 'item o_comment'))
## [1] "확성기 템 나왔네 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ "
## [2] "이제 저걸로 애들이 욕하겠구만 "
## [3] "애.미 애.비 뒤짐 얼래 <-- 냅두고 옆까지만 모자이크처리후 공홈에 업로드\n+ 확성기템 출시\n\n= 돈내고 욕하세요 "
## [4] "ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ채팅게임인가요 "
## [5] "메가폰 ㅋㅋㅋ 던파냐 ㅋㅋㅋ "
## [6] "메가폰 이 나오넹 ㅋㅋ.\n\n다른 이야긴 별로 눈에 들어오진 않네 "
## [7] "메이플 확성기네.. "
## [8] "스킬 버그는 안잡고 시답잖은것만 해대고 앉아있네 "
## [9] "메가폰 ㅋㅋ ㅅㅂ 메이플이냐? ㅋㅋㅋㅋ "
## [10] "한국 신용이 보이네? ㅋㅋ "
## [11] "카발1에 있는 메가폰을 보게 될줄이야! "
## [12] "하트비트 메가폰 ㅋㅋㅋㅋㅋㅋㅋ "
## [13] "메가폰 역시캐쉬네 "
## [14] "아 무슨메가폰이냐ㅡㅡ 확성기도아니고\n돈벌라고 작정을햇네 "
## [15] "유저들이 원하는건 전체챗으로 시덥잖은 욕을 해대는 유저에 대한 처분이지\n채팅창 개선이 아닐텐데? "
## [16] "채팅관련 처벌이 사실상 全無한 상황인데 저게 나오면\n전체챗이 아니라 메가폰으로 쌈박질 하는애들 200퍼 나오겠지… "
## [17] "웃고갑니다ㅋㅋㅋㅋ "
## [18] "남용을 방지하기 위해 T-cat 상점에서 구매?\n지나가던 개가 웃겠다. "
## [19] "메가폰?? 어디서 넥슨 냄새가 나는 것 같은데??? 킁킁 "
## [20] "블루홀 : 싸울거면 돈 내고 싸워라 "
## [21] "에라이 븅신 불구홀 한게이야\n너희 진짜 일하기싫치? 와 진짜 이정도밖에 안되니?\n채팅제재가 그렇게 어려워?\n\n아니 어떡해 이런개선안을 만들고 거기에 또 캐쉬템을 만들생각을하냐? \n\n와....진짜 너흰 답없다 \n한게이나 불구홀이나 똑같다 븅신들....ㅉㅉ "
## [22] "메가폰으로 이벤트 알림 쓰더니만.. 다 이걸 위한 밑밥이었나 "
## [23] "한게임이 퍼블리싱한 게임에서\n캐시템으로 한게임이 욕을 많이 먹지만\n계약만료돼고 독립해서 더 한 짓들을 하는거보면\n이게 한게임한테 한 수 배운건지\n한게임이 대타로 욕을 먹는건지 알수가 없다는 "
## [24] "아직 독립안햇는데여?? "
## [25] "한게임이 퍼블리싱했다가 계약만료된\n다른게임 말하는건데요.. "
## [26] "신던나오면 공대장이나 파장의 오더에\n집중해야하는데 메가폰 도배에 미스나면\n얼마나 짜증날까..\n생각만해도 깊은 빡침이 밀려옵니다. "
## [27] "메가폰은 그냥 채팅탭 위에 스샷처럼 나오는거 아니에요?\n무슨 메가폰이 집정관 알림처럼 나온다고 생각하시는건 아니죠? "
## [28] "메가폰 아이템을 사용하면, 보고 있는 탭에 관계 없이 모두에게 노출되는 메시지를 작성할 수 있습니다. "
## [29] "<a href=\"http://images.hangame.co.kr/upload/coregame/TERA/homepage/2014/G.O%ED%86%B5%EC%8B%A0/%EC%B1%84%ED%8C%85%EC%B1%84%EB%84%90%EA%B0%9C%ED%8E%B8/20150527208.png\" target=\"_blank\">http://images.hangame.co.kr/upload/coregame/TERA/homepage/2014/G.O%ED%86%B5%EC%8B%A0/%EC%B1%84%ED%8C%85%EC%B1%84%EB%84%90%EA%B0%9C%ED%8E%B8/20150527208.png</a> "
## [30] "저기 파장 알림은 화면 중앙에 나오는거고\n메가폰은 채팅창 위에 나오는건데요? "
## [31] "집정관 알림은 설정창에 체크해제라도 가능하죠.\n팔아먹을려는 심보에 얘네가 체크설정 할거같아요? "
## [32] "아무리 눈이 안좋아도 채팅창 위에 나오는 글이랑 화면 중앙에 나오는글이랑 헷깔릴수가 있을까요? "
## [33] "집정관 알림 , 파장알림 , 공대장 알림 => 화면 중앙에 나옴\n메가폰 => 채팅탭위에 스샷처럼 스샷처럼 스샷처럼 스샷처럼 스샷처럼 나옴 "
## [34] "채팅창 탭 톱니바퀴 위에 톱니바퀴 위에 톱니바퀴 위에 톱니바퀴 위에 톱니바퀴 위에 톱니바퀴 위에 톱니바퀴 위에 톱니바퀴 위에 톱니바퀴 위에 톱니바퀴 위에 톱니바퀴 위에 톱니바퀴 위에 톱니바퀴 위에 "
## [35] "제가 화면중앙에 나올거같다고 말하진 않았는데요 "
## [36] "그럼 됬네요 메가폰 도배에 미스날일도 없이\n화면중앙에 나오는 파장알림만 보면 되니깐 "
## [37] "이넘들한테 백번양보해서 채팅탭위에\n메가폰 한 줄은 좋다이겁니다.\n근데 과연 각각의 채팅탭에서\n키고끌수 있게 하느냐는\n유저들 반응을 일주일간 지켜볼요량으로\n지금 떡밥을 던져놓은거죠. "
## [38] "보고 있는 탭에 관계 없이 모두에게 노출되는 메시지를 작성할 수 있습니다.\n무슨 텝을 키든지간에 탭위에 켜져있는 메가폰 메세지를 볼수있습니다.\n채팅내용안 메가폰 내용을 못끄게하면 그건 병신인듯 "
## [39] "이쯤되면 피해망상도 극에 달하는구만 "
## [40] "폭주한지식 댓글 ㄴㄴ해 "
## [41] "차단목록이늘어나겠군 귀찮아서 잘안했는데 "
## [42] "메가폰이라니ㅋㅋ 돈슨 따라하나...ㅋㅋ "
## [43] "복귀자 가이드 좋지 지금 인던 관련 도움말도 좋아\n이제 전장 도움말도 추가할 때라고 본다\n포화 크리부터 시작하자. 기본용어, 전술 가이드까지 있으면 더 좋고 "
## [44] "메가폰 이용자 닥차단합시다. "
## [45] "이런 편의위주의 UI 개편은 얼마든지 환영합니다.\n다만 확성기는 유심히 지켜봐야 할 듯 하네요. "
## [46] "메가폰도 끌수있게해주세여 ^^ "
## [47] "장사하려면 티캣 내라.. "
## [48] "쓸데없는거 건드려서 없던 버그나 만들지 마라.스킬쿨 버그, 쿨 돌았는데도 스킬 안나가는 버그,확장 슬롯 사용시 일부스킬 사용불능 버그 등등..고칠거나 고치고 사고를 치던가. "
## [49] "우린 잊고있었다 한겜은 결코 넥슨과 지향하는\n캐시방향이 살짝 다를뿐\n다를바 없다는걸 "
## [50] "UI 그만 좀 손대지..에휴 "
## [51] "메가폰 심하게 비싼것만 아니면 거래창 진상들 좀 없어질거같은데? "
## [52] "는 버그나좀 고쳐 "
## [53] "힐러부터 살려줘 "
## [54] "이새기들은 진짜 뭐가 먼전지 중요한지를 모르는구나...\n노답새기들 "
## [55] "단축키 설정 해 놓으면 계정으로 저장하게 못하나 ?\n\n매번 캐릭터 만들때 마다 단축키 새로 설정해주는거도 큰 일이다. "
## [56] "파티챗 등에 방해된다고 그냥 기본옵션만 전챗/거래 안보이게 한다는거 같은데\n문제는 전챗/거래 하는 도중에 올라오는 도배/욕설이 없어져야되는거 아님?\n\n진지하게 궁금한건데\n길드/파티/공대창 따로 떼놓고 보는 사람이 그렇게 적나?\n이런 웃기지도 않은 패치를 하게? "
## [57] "열혈강호의 사자후 시스템이 생각나네.. <br/>월드 채팅을 돈 내고 하라는거네. "
## [58] "망햇노.. "
## [59] "욕도 돈내고 해야하네 ㅋㅋㅋㅋ<br/><br/>일단 전 대만족 "
## [60] "칭찬할건 칭찬하고싶음\n개인적으로 개인채팅채널탭은 진짜 개선잘했다고 생각함.\n나와봐야알겠지만 만약에 오른쪽이 개인채널에 들어와있는사람 현황을 알려주는거면 첩자나 눈팅족 금방 알아낼거라 생각함.\n\n다만 패치후 과거처럼 UI렉이 생길까봐 무서운것도 있음\n그냥 [./개인채널 현황] 명령어 하나주고 몇명 접속해있고 누구누구접속해있는지 \n텍스트로 뿌려주면 렉이 덜할거같기도 해서 아쉬움이 있지만 개선했다는것만으로도 감동. "
## [61] "그래서 그 개인채널보다 급한게 없음? 것도 아주 기본적인 버그수정이 개인채널보다 우선순위가 아니라는게 상식적으로 말이된다고 생각하시나요? 칭찬할 일일까요? "
## [62] "센치/ 보통 회사들이 돌아가는 프로세스가 일마다 담당자들이 다 달라서 버그수정하는 사람 따로, 이런거 만드는 사람 따로일듯 합니다. 버그수정할때까지 다른 개발자들이 놀면서 기다리는 것도 아닌데 이런 건 칭찬해줘야되는게 아닌가 싶음요.. "
## [63] "센치//\n\n칭찬해야할건 칭찬해야지 "
## [64] "메이플스토리가 부러웠나보다 "
## [65] "버그라도 먼저 고쳐주던가 시팍~~ 쓸데 없는 짓거리는 졸라게 잘해요 ~ "
## [66] "다좋은데 메가폰은 진짜 싫다 "
## [67] "테라쁠스토리!전채채팅하고싶으면 메가폰으로!물논! 공짜는아닙니다!돈만내시면 누구나 당신의 쌍욕을 감상할수있습니다! "
## [68] "메가폰!? 돈g랄을 싸요 아주그냥-ㅁ- "
## [69] "티켓 넘치는 애들의 채팅용 "
## [70] "자...저거 도배로 엄청 올라올거임..\n그것도 다른내용이 아니라 서로 싸우는내용으로.. "
## [71] "슈밤.. 3일전에 복귀 했는데.. 이제 축제 하고 있었는데 ㅂㄷㅂㄷ "
## [72] "인간적으로 안보이도록 끌 수는 있게 해줘야 하는거 아닌가... "
## [73] "패치해줘도 난리 "
## [74] "쓸데없는 걸 해주니까 난리<br/><br/><br/>채팅창 욕 좀 못하게 해주세요!<br/>그럼 돈 내고 욕하세요!<br/><br/>ㅇ_ㅇa??? "
## [75] "UI손대면 버그생겨서 임시점검때리겠지 ㅋㅋ "
## [76] "이거 그래도 나름개념패치아닌가\n전쳇개판이였던 사실이고\n\n이제 악성욕설유저들 제제좀 가하자 "
## [77] "메가폰ㅋㅋㅋ "
install.packages(‘RSelenium’)
library(RSelenium)
## Loading required package: RCurl
## Loading required package: bitops
## Loading required package: RJSONIO
## Loading required package: XML
##
## Attaching package: 'XML'
##
## The following object is masked from 'package:rvest':
##
## xml
checkForServer()
startServer()
firefox <- remoteDriver(browserName = 'firefox')
firefox$open()
## [1] "Connecting to remote server"
## $applicationCacheEnabled
## [1] TRUE
##
## $rotatable
## [1] FALSE
##
## $handlesAlerts
## [1] TRUE
##
## $databaseEnabled
## [1] TRUE
##
## $version
## [1] "36.0.4"
##
## $platform
## [1] "WINDOWS"
##
## $nativeEvents
## [1] FALSE
##
## $acceptSslCerts
## [1] TRUE
##
## $webdriver.remote.sessionid
## [1] "299604fe-67cf-4f8b-a3db-7c9947b6f537"
##
## $webStorageEnabled
## [1] TRUE
##
## $locationContextEnabled
## [1] TRUE
##
## $browserName
## [1] "firefox"
##
## $takesScreenshot
## [1] TRUE
##
## $javascriptEnabled
## [1] TRUE
##
## $cssSelectorsEnabled
## [1] TRUE
##
## $id
## [1] "299604fe-67cf-4f8b-a3db-7c9947b6f537"
firefox$navigate('http://www.seleniumhq.org/')
menu.download <- firefox$findElement('css selector', '#menu_projects a')
menu.download$clickElement()
h <- html(firefox$getPageSource()[[1]])
html_nodes(h, '#menu_download a')
## [[1]]
## <a title="Get Selenium" href="/download/">Download</a>
##
## attr(,"class")
## [1] "XMLNodeSet"
url <- 'http://media.daum.net/society/others/newsview?newsId=20150609204221852&rMode=list&allComment=T'
# Selenium을 사용합니다
library(RSelenium)
checkForServer()
startServer()
# 파이어폭스로 댓글 페이지를 엽니다
firefox <- remoteDriver()
firefox$open()
## [1] "Connecting to remote server"
## $applicationCacheEnabled
## [1] TRUE
##
## $rotatable
## [1] FALSE
##
## $handlesAlerts
## [1] TRUE
##
## $databaseEnabled
## [1] TRUE
##
## $version
## [1] "36.0.4"
##
## $platform
## [1] "WINDOWS"
##
## $nativeEvents
## [1] FALSE
##
## $acceptSslCerts
## [1] TRUE
##
## $webdriver.remote.sessionid
## [1] "8547c6ba-c8cf-43d5-a0ba-1ef109e2ac44"
##
## $webStorageEnabled
## [1] TRUE
##
## $locationContextEnabled
## [1] TRUE
##
## $browserName
## [1] "firefox"
##
## $takesScreenshot
## [1] TRUE
##
## $javascriptEnabled
## [1] TRUE
##
## $cssSelectorsEnabled
## [1] TRUE
##
## $id
## [1] "8547c6ba-c8cf-43d5-a0ba-1ef109e2ac44"
firefox$navigate(url)
# 미디어다음은 기사 페이지에서 프레임을 통해 댓글 페이지를 보여줍니다.
# 페이지 소스를 가져와 html로 해석하고 iframe을 찾습니다.
# 5번째 iframe의 src 어트리뷰트가 실제 댓글 페이지의 주소입니다
src <- firefox$getPageSource()[[1]]
h <- html(src)
comment.url <- html_attr(html_nodes(h, 'iframe'), 'src')[5]
#파이어폭스에서 실제 댓글 페이지를 열어서 페이지 소스를 가져와 html로 해석합니다
firefox$navigate(comment.url)
src <- firefox$getPageSource()[[1]]
h <- html(src)
# 댓글이 담겨있는 span.content를 찾아 텍스트를 추출합니다
html_text(html_nodes(h, 'span.content'))
## character(0)