빅엑셀(BigExcel.KR) : 엑셀 업무 자동화, 마케팅 관리, 빅데이터 분석, 시각화 and more...

Tip1-3 엑셀 파워쿼리로 Yes24 책 정보(웹페이지) 가져오기 3 본문

유용한 팁 모음

Tip1-3 엑셀 파워쿼리로 Yes24 책 정보(웹페이지) 가져오기 3

BIGEXCEL 2016. 11. 14. 06:00

[목표]

1. 파워쿼리 소스 코드 확인하기

2. '판매지수'값 가져오기

3. 2개의 값을 하나로 합친 후 하나로 불러오기


지난 글에서는 각 도서의 '출간일'을 가져오는 방법을 소개했는데요.

이번에는 원래 수집하기로 했던 '판매지수'를 가져온 후 앞서 가져온 '출간일'정보와 통합하는 방법을 소개해드리겠습니다.


1. 파워쿼리 소스 코드 확인하기


파워쿼리를 이용하는 방법으로는

1. 상단 메뉴를 이용하여 조작하는 방법과

2. 다른 하나는 직접 해당 파워쿼리 소스를 편집하여, 개별 상황에 맞게 수정하는 방법이 있습니다.

(파워쿼리 소스 코드 체계를 M이라고도 부릅니다. 이 블로그에서는 전체를 다루기 보다는 실무에 필요한 부분을 중심으로 설명드리겠습니다.)


2개의 웹사이트 값을 가져오는 경우는 일반적인 기능이 아니기 때문에, 파워쿼리를 직접 편집해야 합니다.

우선 파워쿼리 소스를 어디서 보고, 편집할 수 있는지 소개하겠습니다.


- 발간일을 가져온 쿼리 더블클릭(또는 우마우스 후 편집 클릭)합니다.




- 쿼리편집기가 나타나면 상단 메뉴 > 홈 > 고급 편집기 클릭합니다.




우리가 메뉴를 통해 작업한 내용이 소스 코드 형태로 보여지고 있습니다.

매크로를 만들 때, 매크로를 기록하면 VBA형태로 소스 코드가 만들어지는 것과 유사합니다.



[전체 파워쿼리 소스 코드는 아래와 같습니다.]


========================================


let

    원본 = Web.Page(Web.Contents("http://www.yes24.com/24/goods/32439157")),

    Data2 = 원본{2}[Data],

    Children = Data2{0}[Children],

    Children1 = Children{1}[Children],

    Children2 = Children1{4}[Children],

    Children3 = Children2{12}[Children],

    Children4 = Children3{18}[Children],

    Children5 = Children4{0}[Children],

    Children6 = Children5{0}[Children],

    Children7 = Children6{0}[Children],

    Children8 = Children7{0}[Children],

    Children9 = Children8{0}[Children],

    Children10 = Children9{9}[Children],

    Children11 = Children10{16}[Children],

    Children12 = Children11{2}[Children],

    Children13 = Children12{0}[Children],

    #"제거된 다른 열 수" = Table.SelectColumns(Children13,{"Text"})

in

    #"제거된 다른 열 수"


========================================


- 구조를 간단하게 설명드리자면...


let 밑에는 처리할 내용이 들어갑니다.

처리할 내용이 다 들어가면

in이 나오고, 

그 밑에 출력할 항목이 들어갑니다.


중요 문장을 설명드리겠습니다.


원본 = Web.Page(Web.Contents("http://www.yes24.com/24/goods/32439157")),

: http://www.yes24.com/24/goods/32439157라는 웹사이트에 있는 내용을 html형태로 불러와서 '원본'이라는 곳에 저장합니다.


Children = Data2{0}[Children],

......

Children13 = Children12{0}[Children],

: 이전 글에서 html 계층 구조를 찾아 내려갔던 내용이 한 단계씩 표시됩니다. children은 아래 단계의 html 문서를 의미합니다.


#"제거된 다른 열 수" = Table.SelectColumns(Children13,{"Text"})

: 마지막에 필요한 정보인 '출간일'부분만 선택하고 나머지 열을 제거한 후 이 값을 #"제거된 다른 열 수"라는 곳에 저장합니다.

(문장 제일 마지막에는 ','가 들어가지만, let의 가장 마지막에는 들어가지 않습니다.)

 

2. '판매지수'값 가져오기


이전 글에서 '출간일'정보를 가져온 것처럼 '판매지수'를 가져옵니다. 웹에서 필요한 부분을 찾는 방법은 이전 글을 참고하시기 바랍니다.


'판매지수'를 가져온 파워쿼리 소스를 확인하면, '출간일' 소스와 상당히 비슷한 것을 확인하실 수 있습니다.

가져오는 웹페이지도 같고, html 트리구조도 비슷하기 때문입니다.


이 2가지 쿼리문을 따로따로 불러와도 되지만, 이번 글에서는 하나로 합쳐서 가져오겠습니다.


3. 2개의 값을 하나로 합친 후 하나로 불러오기


[2개의 값을 하나로 합친 후의 전체 파워쿼리 소스 코드는 아래와 같습니다. 첨부 파일 참고]


========================================


let

        원본 = Web.Page(Web.Contents("http://www.yes24.com/24/goods/32439157")),

        Data2 = 원본{2}[Data],

        Children = Data2{0}[Children],

        Children1 = Children{1}[Children],

        Children2 = Children1{4}[Children],

        Children3 = Children2{12}[Children],

        Children4 = Children3{18}[Children],

        Children5 = Children4{0}[Children],

        Children6 = Children5{0}[Children],

        Children7 = Children6{0}[Children],

        Children8 = Children7{0}[Children],

        Children9 = Children8{0}[Children],

        Children10 = Children9{9}[Children],

        Children11 = Children10{16}[Children],

        Children12 = Children11{2}[Children],

        Children13 = Children12{0}[Children],

        Children14 = Children13{0}[Text],

        Pubdate = Children14,


        Sell1 = Children11{5}[Children],

        Sell2 = Sell1{0}[Text],

        Sell3 = Text.Replace(Sell2, "판매중 | 판매지수 ",""),

        Salespoint = Sell3,

        Result = Pubdate&"||"&Salespoint


    in

        Result


========================================


'출간일'을 Pubdate라고 이름 붙였고,

'판매지수'를 Salespoint라고 이름 붙였습니다.


2가지 값이 Children11부터 달라지므로 앞 부분은 공통사용하고, Children11을 재활용하여 Salespoint라는 값을 추출했습니다.


Sell3 = Text.Replace(Sell2, "판매중 | 판매지수 ",""),

: 웹페이지의 값에는 "판매중 | 판매지수 "라는 텍스트가 판매지수와 함께 있기 때문에 Text.Replace라는 텍스트 변환 명령으로 이를 ""공백처리하여 지웠습니다.


Result = Pubdate&"||"&Salespoint

: Pubdate(출간일 정보)와 Salespoint(판매지수)를 ||라는 기호를 구분자를 가운데 넣고 하나의 텍스트로 합쳤습니다.

(구분 기호를 집어 넣은 것은 추후 텍스트를 분리할 필요가 있을 때 작업하기 편리하기 위함입니다.)


소스 코드가 갑자기 등장해서 좀 낯설은 부분도 있지만, 차근차근 따라해보시고, 혹시 진행이 잘 안되는 부분은 언제든지 댓글로 문의해주시기 바랍니다.


다음 글에서는 하나의 책에 대한 값을 가져오던 쿼리문을 여러 권의 책 정보를 가져올 수 있도록 반복처리하는 방법에 대해서 소개해드리겠습니다.


감사합니다.


[사례 실습 파일]

etc01웹파싱02.xlsx