rvest
패키지를 이용한 웹 크롤링 방법
이번엔 표를 가져와보겠습니다
먼저 패키지를 설치합니다
install.packages("rvest")
library(rvest)
무슨 표를 가져올지 고민을 해봤는데 제 롤 전적을 가져와보겠습니다
링크는 http://fow.kr/find/af23c4ee03bd666 입니다
검사 버튼을 눌러서 좀 찾아보면
<table class="tablesorter">
표를 발견할수 있습니다
표를 가져올때는 html_table()
을 사용하면 됩니다
url_lol='http://fow.kr/find/af23c4ee03bd666'
html_lol=read_html(url_lol,encoding='UTF-8')
table=html_lol %>% html_nodes(".tablesorter") %>% html_table()
실행을 했는데 아래에 있는 에러가 뜨네요
Error in type.convert.default(out[, i], as.is = TRUE, dec = dec) :
invalid multibyte string at '<ed><8c><a8>'
검색을 해보니 한글 웹페이지에서 가져올때 인코딩 방식으로 인한 문제라고 합니다Sys.setlocale("LC_ALL", "English")
을 이용하면 해결이 되네요
결과를 볼때는 다시 Sys.setlocale("LC_ALL", "Korean")
를 사용하면 됩니다
> str(table)
List of 8
$ :'data.frame': 2 obs. of 12 variables:
..$ <U+CC54><U+D53C><U+C5B8>(<U+D504><U+B9AC><U+C2DC><U+C98C> <U+C804><U+CCB4>): chr [1:2] "<U+CE74><U+BC00>" "<U+C544><U+D2B8><U+B85D><U+C2A4>"
..$ <U+AC8C><U+C784><U+C218> : int [1:2] 1 1
table
의 구조를 보니 길이 8개 짜리인 리스트로 나오네요 아마 같은페이지 안에 테이블이 여러개 있나봅니다
제가 원하는 테이블은 3번째에 있네요
Sys.setlocale("LC_ALL", "Korean")
table2=table[3][[1]]
table2
출력해보겠습니다
> table2
챔피언(S9 전체랭크) 게임수 승률 KDA 킬 데쓰 어시 CS 평균 골드 트리플 쿼드라 펜타+
1 블라디미르 114 59.64% 3.55 5.7 3.2 5.7 187.7 11,124 11 1 0
2 라이즈 74 52.7% 2.16 5.1 5.0 5.7 191.5 11,146 4 1 1
3 판테온 57 64.91% 2.91 7.2 4.7 6.4 145.5 10,453 0 0 0
4 카밀 56 55.35% 2.28 4.6 4.4 5.5 154.5 10,009 2 0 0
5 아트록스 42 50% 2.42 5.0 4.2 5.0 161.7 10,177 5 0 0
6 빅토르 25 60% 3.77 6.2 3.2 5.8 191.1 11,722 3 1 0
7 쓰레쉬 9 66.66% 3.30 2.1 4.9 14.0 13.9 7,846 0 0 0
게임을 많이도 했네요 이번년도에는 게임을 줄이려고 합니다
약간 어긋나는게 마음에 안드네요 DT
패키지를 쓰면 깔끔하게 결과를 볼 수 있다고 합니다 한번 해보겠습니다
install.packages("DT")
library("DT")
DT::datatable(table2)
오 괜찮게 나오네요
-끝-
'R' 카테고리의 다른 글
R을 이용한 웹 크롤링 (네이버 뉴스) (3) | 2019.12.26 |
---|