top of page

[웹크롤링] 내가 가장 먼저 핫딜 정보를 알고 싶다면?




| 들어가는 말 이번 글에서는 API가 제공되지 않는 경우 웹크롤링으로 비정형 데이터를 얻는 방법으로 이번 문제를 접근해 보겠습니다. 먼저, 온라인 핫딜 정보를 얻기 위해서는 주기적으로 웹사이트를 방문하여 가격을 확인해야 합니다. 그러나 이 작업은 매우 반복적인 작업입니다. 저렴한 비행기 티켓을 얻기 위해 자동화 프로그램을 이용하는 방법을 참고하여 맥북 핫딜 자동 알림 프로그램을 만들어 보도록 하겠습니다. | 목적 온라인 쇼핑몰의 맥북 가격이 특정 가격 이하로 떨어지면 자동으로 이메일 알림을 받습니다.



| 접근 방법 ● 먼저 온라인 쇼핑몰의 제품 정보를 스크래핑 하기 위해 웹사이트 구조를 분석합니다. R의 rvest를 이용하겠습니다. library(rvest) library(XML) #save html of URL url <- "http://www.***.com/category/4945/?p=1&l-id=pagen_1" html 파일의 페이지 소스를 분석하여 필요한 정보인 가격과 제품 정보를 찾습니다. <div class=”b-content”> 부분이 제품 관련 정보가 있는 부분입니다. 이 부분을 추출하도록 하겠습니다. product <- url %>% read_html() %>% html_nodes(".b-content")



크롬의 SelectorGadget를 이용하면 직관적으로 콘텐츠를 선택할 수도 있습니다. 제품명을 추출해 보겠습니다. name <- product %>% html_nodes(".product-name") %>% html_text() 가격을 숫자 형식으로 추출해 보겠습니다. price <- product %>% html_nodes(".b-underline .b-text-prime") %>% html_text() %>% gsub(",","",.) %>% as.numeric() 제품명과 가격을 데이터 프레임에 저장하겠습니다. all <- data.frame(name, price, stringsAsFactors = FALSE) 여러 페이지에서 정보를 수집하겠습니다. for (i in 1:10){ starturl <- "http://www.***.com/category/4945/?p=" nexturl <- "&l-id=pagen_" url <- paste(starturl,i,nexturl,i,sep="") product <- url %>% read_html() %>% html_nodes(".b-content") name <- product %>% html_nodes(".product-name") %>% html_text() price <- product %>% html_nodes(".b-underline .b-text-prime") %>% html_text() %>% gsub(",","",.) %>% as.numeric() mydata <- data.frame(name, price, stringsAsFactors = FALSE) all <- rbind(all,mydata) } all<-all[!duplicated(all),]



● 이번에는 이메일로 알림을 보내는 규칙을 만들어 보겠습니다. 노트북의 가격이 50만 원에서 100만 원 사이인 제품만 알람을 받도록 해 보겠습니다. alert <- all[all$price>500000&all$price<=1000000,] 다음과 같이 알람이 1개 이상이 되면 mailR 패키지를 이용하여 이메일을 보내도록 하겠습니다. if (nrow(alert) >=1){ write.table(alert,"alert.txt",fileEncoding = "UTF-8") send.mail(from = "up****@gmail.com", to = c("up****@gmail.com"), subject = "Mac Deal Alert", body <- "alert.txt", smtp = list(host.name = "smtp.gmail.com", port = 465, user.name = "up****@gmail.com", passwd = "xxxxxxxx", ssl = TRUE), encoding = "utf-8", authenticate = TRUE, send = TRUE) } ● 이 작업을 정기적으로 수행하도록 예약 기능을 구현해 보겠습니다. taskscheduleR 패키지를 사용하여 구현해 보겠습니다. Rscript로 주기적으로 실행하여 자동 알람 메일을 발송하도록 구현합니다.



| 마치면서 웹 데이터를 수집한 사이트는 동적인 스크립트를 위한 코드가 필요하지 않았지만 경우에 따라 로그인 등의 추가 작업이 필요한 경우도 있습니다. 그리고 scrapy, BeautifulSoup을 사용하여 Python으로 구현할 수도 있습니다. 나만의 핫딜 메일링 자동화 프로그램을 설명해 보았는데요, 도움이 되셨는지요? 더 많은 도움이 필요하시다면 유펜솔루션에 문의해 보세요. : )









Comments


bottom of page