Created
June 11, 2024 20:52
-
-
Save JinKwonJeon/aca8cf0d78245262ae8f66894e92d696 to your computer and use it in GitHub Desktop.
GetSearchKeyword 함수 (PowerQuery M)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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