Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save JinKwonJeon/aca8cf0d78245262ae8f66894e92d696 to your computer and use it in GitHub Desktop.

Select an option

Save JinKwonJeon/aca8cf0d78245262ae8f66894e92d696 to your computer and use it in GitHub Desktop.
GetSearchKeyword 함수 (PowerQuery M)
let
// Step 1: Google 검색 제안 XML 형식으로 가져오기
Source = Xml.Tables(Web.Contents("http://suggestqueries.google.com/complete/search?output=toolbar&q="&Keywords,
[Headers=[#"User-Agent"="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36",
#"Content-Type"="text/html; charset=utf-8", Accept="*/*", Connection="keep-alive"]])){0}[Table],
// Step 2: 'suggestion' 열을 확장하여 실제 키워드 제안을 가져오기
ExpandSource = Table.ExpandTableColumn(Source, "suggestion", {"Attribute:data"}, {"Attribute:data"}),
// Step 3: 빈 행 제거하여 데이터 정리
RemoveEmpty = Table.SelectRows(ExpandSource, each [#"Attribute:data"] <> null and [#"Attribute:data"] <> ""),
// Step 4: 열 이름 변경 및 재배치, '플랫폼' 열 추가하여 소스를 '구글'로 식별
GoogleSearchKeyword = Table.ReorderColumns(Table.AddColumn(Table.RenameColumns(RemoveEmpty,{{"Attribute:data", "Keywords"}}), "플랫폼", each "구글"),{"플랫폼", "Keywords"}),
// Step 5: Naver 검색 제안 JSON 형식으로 가져오기
NaverSource = Json.Document(Web.Contents("https://ac.search.naver.com/nx/ac?q="&Keywords&"&st=100")),
// Step 6: JSON 데이터를 테이블 형식으로 변환
ListToNaverTable = Table.FromList(Record.ToTable(NaverSource){[Name="items"]}[Value], Splitter.SplitByNothing(), null, null, ExtraValues.Error),
// Step 7: 중첩된 열 확장
ExpandNaverTable = Table.ExpandListColumn(Table.ExpandListColumn(ListToNaverTable, "Column1"), "Column1"),
// Step 8: 열 이름 변경 및 재배치, '플랫폼' 열 추가하여 소스를 '네이버'로 식별
NaverSearchKeywords = Table.RenameColumns(Table.ReorderColumns(Table.AddColumn(ExpandNaverTable, "플랫폼", each "네이버"),{"플랫폼", "Column1"}),{{"Column1", "Keywords"}}),
// Step 9: Naver 쇼핑 검색 제안 JSON 형식으로 가져오기
NaverShoppingSource = Json.Document(Web.Contents("https://m.shopping.naver.com/api/modules/gnb/auto-complete?keyword="&Keywords)),
// Step 10: JSON 데이터를 테이블 형식으로 변환
ListToNaverShopTable = Table.FromList(Record.ToTable(NaverShoppingSource){[Name="items"]}[Value], Splitter.SplitByNothing(), null, null, ExtraValues.Error),
// Step 11: 중첩된 열 확장
ExapandNaverShopTable = Table.ExpandListColumn(Table.ExpandListColumn(ListToNaverShopTable, "Column1"), "Column1"),
// Step 12: 데이터 정리 및 인덱스 추가, 4로 나눈 나머지를 계산하여 'Mod' 열 추가, 상위 60개 행 선택
AddMods = Table.FirstN(Table.AddColumn(Table.AddIndexColumn(Table.SelectRows(ExapandNaverShopTable, each [Column1] <> null and [Column1] <> ""), "idx", 0, 1, Int64.Type), "Mod", each Number.Mod([idx],4)),60),
// Step 13: 'Mod' 열 값이 0인 행 선택
FilterNaverShopKeywords = Table.ExpandListColumn(Table.SelectRows(AddMods, each ([Mod] = 0)), "Column1"),
// Step 14: 열 이름 변경 및 재배치, '플랫폼' 열 추가하여 소스를 '네이버쇼핑'으로 식별
NaverShopKeywords = Table.ReorderColumns(Table.AddColumn(Table.RenameColumns(Table.SelectColumns(FilterNaverShopKeywords,{"Column1"}),{{"Column1", "Keywords"}}), "플랫폼", each "네이버쇼핑"),{"플랫폼", "Keywords"}),
// Step 15: Coupang 검색 제안 CSV 형식으로 가져오기
CoupangSource = Csv.Document(Web.Contents("https://www.coupang.com/np/search/autoComplete?callback=&keyword="&Keywords),[Delimiter="{", Columns=30, Encoding=65001, QuoteStyle=QuoteStyle.None]),
// Step 16: CSV 데이터에서 키워드 추출
GetCoupangKeywords = Table.SelectRows(Table.UnpivotOtherColumns(CoupangSource, {}, "Cols", "Keywords"), each [Keywords] <> null and [Keywords] <> ""),
// Step 17: 키워드 텍스트 정리
ExtractCoupangKeywords = Table.TransformColumns(GetCoupangKeywords, {{"Keywords", each Text.BetweenDelimiters(_, """", """"), type text}}),
// Step 18: 열 이름 변경 및 재배치, '플랫폼' 열 추가하여 소스를 '쿠팡'으로 식별
CoupangSearchKeywords = Table.ReorderColumns(Table.AddColumn(Table.SelectColumns(Table.SelectRows(ExtractCoupangKeywords, each [Keywords] <> null and [Keywords] <> ""),{"Keywords"}), "플랫폼", each "쿠팡"),{"플랫폼", "Keywords"}),
// Step 19: 각 플랫폼의 결과 결합
CombineResults = Table.Combine({NaverSearchKeywords, GoogleSearchKeyword, NaverShopKeywords, CoupangSearchKeywords}),
// Step 20: 키워드로 그룹화하여 빈도수와 플랫폼 병합, 빈도순으로 정렬
GetSearchKeywords = Table.Sort(Table.Group(CombineResults, {"Keywords"}, {{"Cnt", each Table.RowCount(_), Int64.Type}, {"Merge", each Text.Combine([플랫폼],","), type text}}),{{"Cnt", Order.Descending}})
in
GetSearchKeywords
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment