안녕하세요.

github에서는 매우 훌륭한 코드와 이를 공개해주신 많은 훌륭하신 분들이 계시는데요, 오늘은 그분들 중에 

dashee87 유저명을 쓰시는 David Sheehan께서 만드신 indeed API를 활용한 데이터 크롤링 R함수를 분석해보도록하겠습니다. 

우선 Rstudio에서 아래와 같이 패키지를 설치하셔야 합니다. 


>install.packages("devtools")
>library(devtools)
>install_github("dashee87/jobbR")


이후에 R 스튜디오 에서 jobsearch라는 함수를 보시면 api를 이용해서 데이터 크롤링을 할수 있는 함수를 직접확인하실수 있습니다. 


> jobSearch
function (publisher, query, country = "us", location = "", radius = 25,
    sort = c("relevance", "date"), start = 0, limit = 10, all = FALSE,
    latlong = "", fromAge = "", st = "", jt = "", filter = "",
    userip = "1.2.3.4", version = 2, userAgent = "Mozilla/%2F4.0%28Firefox%29",
    callback = "", highlight = "", chnl = "")
{
    sort <- match.arg(sort)
    if (!all) {
        url <- paste0("http://api.indeed.com/ads/apisearch?publisher=",
            publisher, "&q=", query, "&l=", location, "&latlong=",
            latlong, "&userip=", userip, "&useragent=", userAgent,
            "&format=json&start=", start, "&radius=", radius,
            "&st=", st, "&jt=", jt, "&fromage=", fromAge, "&limit=",
            limit, "&highlight=", highlight, "&filter=", filter,
            "&callback=", callback, "&co=", country, "&sort=",
            sort, "&chnl=", chnl, "&v=", version)
        as.data.frame(jsonlite::fromJSON(httr::content(httr::GET(url),
            as = "text", encoding = "UTF-8")))
    }
    else {
        url <- paste0("http://api.indeed.com/ads/apisearch?publisher=",
            publisher, "&q=", query, "&l=", location, "&latlong=",
            latlong, "&userip=", userip, "&useragent=", userAgent,
            "&format=json&start=", 0, "&radius=", radius, "&st=",
            st, "&jt=", jt, "&fromage=", fromAge, "&limit=",
            25, "&highlight=", highlight, "&filter=", filter,
            "&callback=", callback, "&co=", country, "&sort=",
            sort, "&chnl=", chnl, "&v=", version)
        first_jobs <- jsonlite::fromJSON(httr::content(httr::GET(url),
            as = "text", encoding = "UTF-8"))
        jobs_lists <- lapply(seq(0, max(first_jobs$totalResults),
            25), function(x) {
            url <- gsub("start=0", paste0("start=", x), url)
            as.data.frame(jsonlite::fromJSON(httr::content(httr::GET(url),
                as = "text", encoding = "UTF-8")))
        })
        jsonlite::rbind.pages(jobs_lists)
    }
}
<environment: namespace:jobbR>


보시다싶이 데이터 크롤링을 하기 위한 agent로 파이어폭스를 이용하였습니다. 따라서 파이어 폭스를 설치하시지 않으면 위의 함수는 작동하지 않습니다. 
또한 나머지 규격은 indeed api가 정해놓은 규격대로 설정을 했습니다. 


에 들어가셔서 api를 위한 id를 만들고 그것을 publisher로 등록하면 publisher key를 발급해줍니다. 



ID를 만들고 로그인을 하게 되면 아래와 같은 화면을 확인하실수 있습니다. 




여기서 드래그를 하다보면 아래와 같이 publisher key발급한 내용을 확인하실수 있습니다. 

총 16자리 숫자로 그숫자를 이용하여서 자료를 긁어올수 있도록 할수 있습니다. 



따라서 위와같이 publisher key를 발급하고, 파이어폭스를 설치하시면 아래와 같이 jobsearch라는 함수를 이용해서 아래와 같이 데이터를 크롤링할수 있습니다. 


> dataScientists <- jobSearch(publisher = "XXXXXXXXX582", query = "data+scientist", country = "uk", location = "london",all = TRUE)

##  XXXXXXXXX582 대신하여 여러분의 키값을 넣으세요 



확인하시고 다른 사이트의 API를 이용해서 데이터를 가지고 오실때 참조하시면 좋을 것같습니다. 

감사합니다. 


+ Recent posts