jorandradefig

scraping.R

Mar 9th, 2019
304
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
R 6.51 KB | None | 0 0
  1. # instalar el paquete rvest
  2.  
  3. install.packages('rvest')
  4.  
  5. # cargar el paquete rvest
  6. library('rvest')
  7.  
  8. # especificar la url del website para ser scrapeada
  9. url <- 'http://www.imdb.com/search/title?count=100&release_date=2016,2016&title_type=feature'
  10.  
  11. # leer el código HTML del website
  12. webpage <- read_html(url)
  13.  
  14. # utilizar selectores CSS para scrapear la sección de rankings
  15. rank_data_html <- html_nodes(webpage,'.text-primary')
  16.  
  17. # convertir los datos del ranking en texto
  18. rank_data <- html_text(rank_data_html)
  19.  
  20. # imprimir los primeros valores de ranking
  21. head(rank_data)
  22.  
  23. # convertir los datos de ranking a números
  24. rank_data<-as.numeric(rank_data)
  25.  
  26. # imprimir los primeros valores de ranking
  27. head(rank_data)
  28.  
  29. # utilizar selectores CSS para scrapear la sección de títulos
  30. title_data_html <- html_nodes(webpage,'.lister-item-header a')
  31.  
  32. # convertir los datos de título a texto
  33. title_data <- html_text(title_data_html)
  34.  
  35. # imprimir los primeros datos de título
  36. head(title_data)
  37.  
  38. # utilizar selectores CSS para scrapear la sección de descripción
  39. description_data_html <- html_nodes(webpage,'.ratings-bar+ .text-muted')
  40.  
  41. # convertir los datos de descripción a texto
  42. description_data <- html_text(description_data_html)
  43.  
  44. # imprimir los datos de descripción
  45. head(description_data)
  46.  
  47. # remover '\n'
  48. description_data<-gsub("\n","",description_data)
  49.  
  50. # imprimir los datos de descripción
  51. head(description_data)
  52.  
  53. # utilizar selectores CSS para scrapear la sección de duración
  54. runtime_data_html <- html_nodes(webpage,'.text-muted .runtime')
  55.  
  56. # convertir la duración a texto
  57. runtime_data <- html_text(runtime_data_html)
  58.  
  59. # imprimir las duraciones
  60. head(runtime_data)
  61.  
  62. # remover 'mins' y convertir a numérico
  63.  
  64. runtime_data<-gsub(" min","",runtime_data)
  65. runtime_data<-as.numeric(runtime_data)
  66.  
  67. # imprimir las duraciones
  68. head(runtime_data)
  69.  
  70. # utilizar selectores para scrapear los géneros
  71. genre_data_html <- html_nodes(webpage,'.genre')
  72.  
  73. # convertir los géneros a texto
  74. genre_data <- html_text(genre_data_html)
  75.  
  76. # imprimir los géneros
  77. head(genre_data)
  78.  
  79. # remover '\n'
  80. genre_data<-gsub("\n","",genre_data)
  81.  
  82. # removes espacios
  83. genre_data<-gsub(" ","",genre_data)
  84.  
  85. # tomar sólo el primer género
  86. genre_data<-gsub(",.*","",genre_data)
  87.  
  88. # convertir los géneros a factor
  89. genre_data<-as.factor(genre_data)
  90.  
  91. # imprimir los géneros
  92. head(genre_data)
  93.  
  94. # utilizar selectores para scrapear los ratings
  95. rating_data_html <- html_nodes(webpage,'.ratings-imdb-rating strong')
  96.  
  97. # convertir los ratings a texto
  98. rating_data <- html_text(rating_data_html)
  99.  
  100. # imprimir los ratings
  101. head(rating_data)
  102.  
  103. # convertir los ratings a número
  104. rating_data<-as.numeric(rating_data)
  105.  
  106. # imprimir los ratings
  107. head(rating_data)
  108.  
  109. # utilizar selectores para scrapear los votos
  110. votes_data_html <- html_nodes(webpage,'.sort-num_votes-visible span:nth-child(2)')
  111.  
  112. # convertir los votos a texto
  113. votes_data <- html_text(votes_data_html)
  114.  
  115. # imprimir los votos
  116. head(votes_data)
  117.  
  118. # remover las comas
  119. votes_data<-gsub(",","",votes_data)
  120.  
  121. # convertir los votos a número
  122. votes_data<-as.numeric(votes_data)
  123.  
  124. # imprimir los votos
  125. head(votes_data)
  126.  
  127. # utilizar selectores para scrapear los directores
  128. directors_data_html <- html_nodes(webpage,'.text-muted+ p a:nth-child(1)')
  129.  
  130. # convertir los directores a texto
  131. directors_data <- html_text(directors_data_html)
  132.  
  133. # imprimir los directores
  134. head(directors_data)
  135.  
  136. # convertir los directores a factor
  137. directors_data<-as.factor(directors_data)
  138.  
  139. # utilizar selectores para scrapear los autores
  140. actors_data_html <- html_nodes(webpage,'.lister-item-content .ghost+ a')
  141.  
  142. # convertir los autores a texto
  143. actors_data <- html_text(actors_data_html)
  144.  
  145. # imprimir los actores
  146. head(actors_data)
  147.  
  148. # convertir los actores a factor
  149. actors_data<-as.factor(actors_data)
  150.  
  151. # imprimir el factor de autores
  152. actors_data
  153.  
  154. # utilizar selectores para scrapear los metascore
  155. metascore_data_html <- html_nodes(webpage,'.metascore')
  156.  
  157. # convertir los metascore a texto
  158. metascore_data <- html_text(metascore_data_html)
  159.  
  160. # imprimir los metascore
  161. head(metascore_data)
  162.  
  163. # remover los espacios
  164. metascore_data<-gsub(" ","",metascore_data)
  165.  
  166. # imprimir la longitud de los metascore
  167. length(metascore_data)
  168.  
  169. # rellenar los missings con NA's
  170.  
  171. for (i in c(39,73,80,89)){
  172.  
  173.   a<-metascore_data[1:(i-1)]
  174.  
  175.   b<-metascore_data[i:length(metascore_data)]
  176.  
  177.   metascore_data<-append(a,list("NA"))
  178.  
  179.   metascore_data<-append(metascore_data,b)
  180.  
  181. }
  182.  
  183. # convertir metascores a numérico
  184. metascore_data<-as.numeric(metascore_data)
  185.  
  186. # imprimir longitud de metascores
  187.  
  188. length(metascore_data)
  189.  
  190. # imprimir el resumen estadístico
  191. summary(metascore_data)
  192.  
  193. # utilizar selectores para scrapear las ganancias
  194. gross_data_html <- html_nodes(webpage,'.ghost~ .text-muted+ span')
  195.  
  196. # convertir las ganancias a texto
  197. gross_data <- html_text(gross_data_html)
  198.  
  199. # imprimir las ganancias
  200. head(gross_data)
  201.  
  202. # remover las M's
  203. gross_data<-gsub("M","",gross_data)
  204.  
  205. # removes las $
  206.  
  207. gross_data<-substring(gross_data,2,6)
  208.  
  209. # imprimir la longitud de las ganancias
  210. length(gross_data)
  211.  
  212. # rellenar los missings con NA
  213.  
  214. for (i in c(17,39,49,52,57,64,66,73,76,77,80,87,88,89)){
  215.  
  216.   a<-gross_data[1:(i-1)]
  217.  
  218.   b<-gross_data[i:length(gross_data)]
  219.  
  220.   gross_data<-append(a,list("NA"))
  221.  
  222.   gross_data<-append(gross_data,b)
  223.  
  224. }
  225.  
  226. # convertir las ganancias a numérico
  227. gross_data<-as.numeric(gross_data)
  228.  
  229. # imprimir la longitud de las ganancias
  230. length(gross_data)
  231.  
  232. # imprimir el resumen estadístico de las ganancias
  233. summary(gross_data)
  234.  
  235. # combinar todas las listas en un data frame
  236. movies_df<-data.frame(Rank = rank_data, Title = title_data,
  237.                      
  238.                       Description = description_data, Runtime = runtime_data,
  239.                      
  240.                       Genre = genre_data, Rating = rating_data,
  241.                      
  242.                       Metascore = metascore_data, Votes = votes_data,                                                             Gross_Earning_in_Mil = gross_data,
  243.                      
  244.                       Director = directors_data, Actor = actors_data)
  245.  
  246. # imprimir la estructura del data frame
  247.  
  248. str(movies_df)
  249.  
  250. # cargar ggplot2
  251.  
  252. library('ggplot2')
  253.  
  254. # crear un histograma
  255.  
  256. qplot(data = movies_df,Runtime,fill = Genre,bins = 30)
  257.  
  258. # crear scatters
  259.  
  260. ggplot(movies_df,aes(x=Runtime,y=Rating))+
  261.   geom_point(aes(size=Votes,col=Genre))
  262.  
  263. ggplot(movies_df,aes(x=Runtime,y=Gross_Earning_in_Mil))+
  264.   geom_point(aes(size=Rating,col=Genre))
Advertisement