코딩 연습/코딩배우기

네이버 지식인 명예의전당 질문 키워드 추출(with 파이썬 크롤링)

good4me 2022. 3. 23. 22:24

네이버 지식인(지식iN)의 명예의 전당 영역에 있는 질문 키워드에 대해 파이썬 크롤링으로 추출해보았다. 연도별 100개 키워드가 있고, 월별 질문 개수와 최대 질문 월이 라인 그래프에 표시되어있다. (단, 당해연도는 월별 집계만 됨)

 

 

네이버 지식iN 질문 키워드 추출해보기

지식iN 페이지

네이버 지식인
네이버 지식인 명예의전당

 

개발자도구(F12)로 보기

개발자도구 소스코드
개발자도구 소스코드

 

파이썬 크롤링 소스 코드

import requests
from bs4 import BeautifulSoup
from datetime import date

def naver_knowledge(fr_years, to_years, months):
    today_year = date.today().year
    today_month = date.today().month
    if fr_years < 2010 or to_years > today_year:
        print(f'연도는 2010 ~ 2022 사이 입력!!')
        return False
    elif to_years == today_year and months > today_month - 1:
        print(f'{today_year}년도 월은 전월까지 입력!!')
        return False
    else:
        if to_years == today_year:
            to_years += months - 1

        for y in range(to_years, fr_years - 1, -1):
            # print('y:', y)
            if y >= today_year:
                url = f'https://kin.naver.com/hall/topic.naver?year={today_year}&month={months}'
            elif y < today_year:
                print(f'{today_year}년도가 아니면 월은 "0"')
                months = 0
                url = f'https://kin.naver.com/hall/topic.naver?year={y}&month={months}'

            headers = {
                'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36',
            }

            res1 = requests.get(url, headers=headers)
            # print(res1.status_code)

            if res1.status_code == 200:
                soup1 = BeautifulSoup(res1.text, 'html.parser')
                contents_li = soup1.select('#contentsOfHall > div.article_list.grid_inner > ul > li')
                # print(len(contents_li))

                for li in contents_li:
                    # 순위
                    rank = li.find('span', class_='rank').text.strip()
                    # 질문 키워드
                    heading = li.find('div', {'class': 'heading'}).find('strong', class_='tit').text.strip()
                    # 질의 개수 
                    q_num = li.find('div', {'class': 'heading'}).find('em', class_='num').text.strip()

                    if y < today_year:
                        # 월별 질의 개수                        
                        mon_num = li.select_one('a > div.statistics_area._svgArea > div > div.graph_line > div > span').text.strip()
                        # 최대 질의 월
                        maxnum_mon = li.select_one('a > div.statistics_area._svgArea > div > div.point_value > div > span > em').text.strip()
                    else:
                        mon_num = ''
                        maxnum_mon = ''

                    if y >= today_year:
                        y = today_year
                    print(y, months, rank, heading, q_num, maxnum_mon, mon_num)    
                
                liList = soup1.select('#lowListArea > div > ul > li')
                # print(len(liList))

                for li in liList:
                    rank = li.find('span', class_='rank').text.strip()
                    heading = li.find('div', {'class': 'heading'}).find('strong', class_='tit').text.strip()
                    q_num = li.find('div', {'class': 'heading'}).find('em', class_='num').text.strip()
                    if y < today_year:
                        mon_num = li.select_one('a > div.statistics_area._svgArea > div > div.graph_line > div > span').text.strip()
                        maxnum_mon = li.select_one('a > div.statistics_area._svgArea > div > div.point_value > div > span > em').text.strip()
                    else:
                        mon_num = ''
                        maxnum_mon = ''

                    if y >= today_year:
                        y = today_year                        
                    print(y, months, rank, heading, q_num, maxnum_mon, mon_num)

                if y >= today_year:
                    months -= 1

                print('=' * 50)

            else:
                print(f'status_code: {res1.status_code}')

fr_years = 2021
to_years = 2022
months = 2
naver_knowledge(fr_years, to_years, months)

◎ 네이버 지식인의 명예의 전당 질문 키워드 내역을 살펴보면, 당해연도(2022)는 월별로 질문 상위 100개 키워드가 집계되고, 이전 연도는 연도별로 질문 상위 100개가 집계되는데 연도 단위이다 보니 월별로 집계 자료가 따로 있었다.

◎ 크롤링 함수는 추출하고자 하는 시작 연도와 끝 연도를 입력((당해연도는 월까지 사용)받아 처리하도록 하되, 연도 기간이나 월을 벗어나면 return False로 다시 입력하게 했다.

◎ 동일 함수에서 당해연도 월 처리를 하기 위해서 입력한 당해연도에 월을 더하고 for 문으로 순환(최근 연도부터 이전 연도로 처리되도록 -1 순감 처리)시키되 당해연도일 경우 월만 -1 되도록 하고, 이전 연도일 경우는 네이버 지식인 URL 그대로(연도만 변경, 월은 0) 처리되도록 했다.

◎ 질문 키워드 순위(1~100)에서 상위 3위까지와 나머지가 구분되어있기 때문에 requests.get() 처리 후 BeautifulSoup는 나누어서 처리했다. 다만, 당해연도의 경우 라인 그래프가 없기 때문에 그 부분은 if 문으로 조건 분기 처리했다.

◎ 크롤링 처리 자체는 무난한데, 당해연도는 월까지 입력을 받아야 하는 문제로 이전 연도와의 구분 처리가 좀 귀찮은 매커니즘이었다.

 

good4me.co.kr

 

[추출 결과]

2022 2 5 자가격리 3,440
2022 2 6 청년희망적금 2,917       
2022 2 7 러시아 2,340
2022 2 8 전쟁 1,648
2022 2 9 pcr검사 1,556
2022 2 10 쇼트트랙 1,535
2022 2 11 코로나 양성 1,524       
2022 2 12 초콜릿 1,471
2022 2 13 우크라이나 1,466        
2022 2 14 오미크론 1,380
2022 2 15 국방력 1,375
2022 2 16 코로나 확진자 1,313     
2022 2 17 코로나 자가격리 1,090   
2022 2 18 주술회전 931
2022 2 19 반배정 787
2022 2 20 갤럭시 s22 705
2022 2 21 사전예약 675
2022 2 22 수강신청 488
2022 2 23 새학기 437
2022 2 24 개학 423
2022 2 25 슬리퍼 420
2022 2 26 등교 389
2022 2 27 교복치마 384
2022 2 28 투표 356
2022 2 29 컬링 305
2022 2 30 임영웅 304
2022 2 31 베이징 동계 올림픽 260  
2022 2 32 동거가족 254
2022 2 33 성인가요 252
2022 2 34 교통사고 후유증 244     
2022 2 35 올림픽 쇼트트랙 233     
2022 2 36 발렌타인데이 218        
2022 2 37 국가대표 216
2022 2 38 인후통 201
2022 2 39 갤럭시 s22 울트라 182   
2022 2 40 갤럭시탭 s8 181
2022 2 41 허경영 175
2022 2 42 2022 청년희망적금 175   
2022 2 43 쇼트트랙 선수 169       
2022 2 44 입학식 168
2022 2 45 유급휴가 167
2022 2 46 희미하다 163
2022 2 47 방탄 콘서트 158
2022 2 48 추가합격 155
2022 2 49 결승 143
2022 2 50 전파 141
2022 2 51 스물다섯 스물하나 141  
2022 2 52 황대헌 선수 134        
2022 2 53 피겨스케이팅 132       
2022 2 54 계주 121
2022 2 55 반장 120
2022 2 56 스피드스케이팅 118     
2022 2 57 두상 117
2022 2 58 sm 광야 오디션 115
2022 2 59 실격 110
2022 2 60 푸틴 107
2022 2 61 영어과외 106
2022 2 62 새학기 친구 106
2022 2 63 수학과외 105
2022 2 64 파베초콜릿 100
2022 2 65 이준서 선수 100
2022 2 66 관계사 99
2022 2 67 곽윤기 선수 92
2022 2 68 2022 베이징 동계올림픽 92
2022 2 69 금메달 90
2022 2 70 갤로퍼 90
2022 2 71 복잡한 84
2022 2 72 등록금 납부 84
2022 2 73 소년심판 83
2022 2 74 정시 추가모집 81
2022 2 75 출전 80
2022 2 76 단일화 80  
2022 2 77 삼일절 78
2022 2 78 명찰 77
2022 2 79 콘서트 티켓 71
2022 2 80 개강 71
2022 2 81 헤드셋 추천 70
2022 2 82 차준환 선수 70
2022 2 83 반택 분실 66
2022 2 84 명지대 66
2022 2 85 슬리퍼 추천 65
2022 2 86 주술회전 특전 64
2022 2 87 조이현 64
2022 2 88 천안 쌍용동 62
2022 2 89 믹스마스터 62
2022 2 90 자가진단앱 61
2022 2 91 생활지원비 61
2022 2 92 나토 61
2022 2 93 포켓몬 레전드 아르세우스 60
2022 2 94 아이스링크장 60
2022 2 95 빙상장 60
2022 2 96 은행원 59
2022 2 97 편입생 58
2022 2 98 압박스타킹 57
2022 2 99 삼성닷컴 57
2022 2 100 김연아 57
==================================================
2022 1 1 연말정산 13,579  
2022 1 2 부가가치세 3,119  
2022 1 3 명절 1,354
2022 1 4 세시풍속 1,129  
2022 1 5 설날 647
2022 1 6 소상공인 506
2022 1 7 인수분해 443
2022 1 8 진격의거인 408
2022 1 9 부가세신고 403
2022 1 10 간이과세자 398
2022 1 11 연말정산 월세 385
2022 1 12 연말정산 문의 376
2022 1 13 인적공제 339
2022 1 14 지금 우리 학교는 306
2022 1 15 설연휴 304
2022 1 16 그해 우리는 303
2022 1 17 수동태 297
2022 1 18 의료비 272
2022 1 19 원천징수영수증 263
2022 1 20 방과후 설렘 222
2022 1 21 학교배정 217
2022 1 22 손실보상 216
2022 1 23 솔로지옥 214
2022 1 24 cj택배 파업 214
2022 1 25 배치고사 203
2022 1 26 홈택스 197
2022 1 27 이차방정식 189
2022 1 28 변성기 181
2022 1 29 이차함수 179  
2022 1 30 선지급 174
2022 1 31 유리수 171
2022 1 32 예비소집일 160
2022 1 33 프리지아 155
2022 1 34 추천인 152
2022 1 35 lg에너지솔루션 151
2022 1 36 엔하이픈 141
2022 1 37 지수법칙 140
2022 1 38 생카 136
2022 1 39 공모주 청약 134
2022 1 40 기부금 133
2022 1 41 테라버닝 129
2022 1 42 롤 고소 127
2022 1 43 큐넷 123
2022 1 44 kb증권 121
2022 1 45 포켓몬카드 시세 120
2022 1 46 중학교 교복 119
2022 1 47 곱셈공식 117
2022 1 48 안철수 115
2022 1 49 수강신청 115
2022 1 50 지수함수 112
2022 1 51 워너아이 112
2022 1 52 케플러 110
2022 1 53 태현 108
2022 1 54 택배파업지역 107
2022 1 55 고등학교 배정 105  
2022 1 56 할리우드 104
2022 1 57 가온차트 104
2022 1 58 새학기 98
2022 1 59 1되 96
2022 1 60 공덕 92
2022 1 61 중3 과학 90
2022 1 62 레전드 아르세우스 89
2022 1 63 올해 사주 86
2022 1 64 로그함수 86
2022 1 65 설탭 84
2022 1 66 여고추리반 82
2022 1 67 서가대 79
2022 1 68 씽2게더 78
2022 1 69 앙스타 유사코롯타 77
2022 1 70 맞벌이 77
2022 1 71 최예나 76
2022 1 72 병역판정검사 76
2022 1 73 개학 76
2022 1 74 펫시뮬 74
2022 1 75 도무송 72
2022 1 76 골든디스크 71
2022 1 77 코로나 자가진단 키트 70
2022 1 78 최소공배수 70
2022 1 79 미사일 68  
2022 1 80 광주 일상회복지원금 66
2022 1 81 메이플 모험가 65
2022 1 82 갤럭시 s22 64
2022 1 83 유애나 5기 61
2022 1 84 라그나로크 58
2022 1 85 포용 56
2022 1 86 팬미팅 55
2022 1 87 주근깨 55
2022 1 88 카배 54
2022 1 89 건강운 54
2022 1 90 가중처벌 54
2022 1 91 베이징 53
2022 1 92 미국 영화 53
2022 1 93 김건희 녹취록 53
2022 1 94 설선물 52
2022 1 95 롤 통매음 고소 52
2022 1 96 경관의 피 52
2022 1 97 타동사 51
2022 1 98 일반사업자 51
2022 1 99 손실보상금 51
2022 1 100 윗치폼 50
==================================================
2022년도가 아니면 월은 "0"
2021 0 1 코로나 백신 17,857 8 208,194,424,353,595,1302,2000,3724,2441,2430,1870,2312
2021 0 2 올림픽 10,539 7 229,211,315,242,296,478,4324,3003,471,359,348,261
2021 0 3 쿠키런 킹덤 7,914 2 329,1960,1360,1242,783,414,360,310,376,284,214,280
2021 0 4 귀멸의 칼날 7,326 2 569,1137,1085,1014,902,611,427,305,264,390,305,316
2021 0 5 아이폰13 5,778 10 21,25,24,47,71,70,111,202,876,2030,1236,1061
2021 0 6 화이자 백신 5,254 8 4,11,23,35,71,327,718,1104,1049,747,638,524
2021 0 7 급식 4,658 2 109,2857,206,137,232,255,148,178,135,151,125,122
2021 0 8 펜트하우스 4,101 3 471,557,926,358,146,367,401,389,333,71,46,31
2021 0 9 매점 3,814 2 103,2838,151,74,88,84,77,82,80,86,71,77
2021 0 10 머리염색 3,480 2 75,2822,92,51,56,51,76,58,46,46,49,55
2021 0 11 로스트아크 3,163 8 77,137,532,233,186,164,351,537,319,216,203,206
2021 0 12 에스파 2,501 11 65,52,27,23,139,181,185,165,173,533,534,422
2021 0 13 백신 부작용 2,416 9 5,3,25,20,38,86,137,353,474,425,399,448
2021 0 14 진격거 2,300 1 472,427,441,267,194,106,105,86,70,67,38,23
2021 0 15 오징어 게임 2,109 10 0,0,0,0,0,0,0,2,736,1025,241,101
2021 0 16 갤럭시 워치4 2,097 9 5,6,4,5,9,5,19,582,602,361,271,226
2021 0 17 중학교 교복 2,076 2 145,1684,54,25,22,20,12,21,23,30,20,18
2021 0 18 업비트 2,054 4 41,130,188,476,310,143,101,108,112,160,139,143
2021 0 19 자가격리 지원금 1,697 9 46,33,50,87,90,91,199,231,262,173,200,231
2021 0 20 중학교 반배치고사 1,675 2 30,1614,13,1,0,1,0,2,2,2,2,5
2021 0 21 윤석이 1,526 11 26,17,103,35,37,117,134,114,158,187,323,272
2021 0 22 pcr검사 1,469 12 26,45,67,41,59,64,93,86,113,121,224,528
2021 0 23 윈도우11 1,462 10 0,0,0,0,2,78,178,73,97,448,330,254
2021 0 24 디아블로2 1,455 10 37,60,62,53,30,48,39,90,278,473,185,97
2021 0 25 티파이 1,435 2 31,419,95,89,91,101,93,97,97,110,98,111
2021 0 26 고등학교 교복 1,435 2 51,1214,35,18,11,14,6,16,11,13,14,29
2021 0 27 이재명 1,369 10 20,14,23,21,19,34,96,91,199,317,291,239
2021 0 28 스포티파이 1,226 2 16,404,88,83,84,91,77,80,77,77,66,80
2021 0 29 모더나 백신 1,218 9 2,0,4,4,10,15,126,185,406,334,87,42
2021 0 30 아스트라 1,134 6 7,40,116,140,218,272,65,132,70,32,16,25
2021 0 31 알페스 1,126 1 844,108,61,17,13,12,11,13,15,16,10,3
2021 0 32 귀멸의 칼날 무한열차 1,112 2 180,225,184,175,125,95,31,23,19,36,6,11
2021 0 33 택배 파업 1,100 6 94,41,22,1,8,614,88,38,56,54,48,33
2021 0 34 3기 신도시 1,070 7 61,38,35,48,52,108,345,113,37,106,66,58
2021 0 35 스테이씨 1,015 9 16,20,20,78,104,51,58,76,177,170,132,112
2021 0 36 버즈2 972 9 0,3,1,1,1,1,5,237,274,195,135,116
2021 0 37 대체공휴일 966 8 2,1,3,2,4,88,115,299,107,275,31,36
2021 0 38 아스트라제네카 942 6 6,29,99,121,185,231,52,107,55,24,11,19
2021 0 39 앙상블 913 12 38,28,31,28,41,49,73,121,125,115,121,140
2021 0 40 여자배구 870 8 22,37,22,9,24,20,140,468,40,33,32,21
2021 0 41 동파 865 1 632,44,17,6,7,11,7,7,10,12,26,83
2021 0 42 디즈니 플러스 857 11 15,9,5,12,12,9,17,14,17,25,432,288
2021 0 43 갤럭시 z플립3 846 8 1,1,2,2,4,3,13,399,197,101,71,49
2021 0 44 국민의힘 831 10 20,19,31,52,48,81,56,64,95,154,130,78
2021 0 45 사전청약 814 7 22,10,12,25,22,57,221,78,38,119,90,117
2021 0 46 오디오북 801 6 11,14,7,13,11,508,184,13,11,9,8,8
2021 0 47 앙상블 스타즈 794 12 35,27,27,24,39,44,62,106,106,98,105,119
2021 0 48 틱톡 추천 774 8 13,15,8,8,7,12,40,605,22,20,16,6
2021 0 49 빗썸 756 4 39,67,90,174,75,35,37,43,35,35,48,75
2021 0 50 고교학점제 733 10 17,132,53,36,35,44,32,41,48,149,86,59
2021 0 51 미얀마 729 3 21,51,159,131,99,59,61,55,19,29,25,17
2021 0 52 말랑이 722 10 3,3,10,49,81,64,62,35,116,142,85,70
2021 0 53 포켓몬 이름 714 9 24,15,14,6,38,99,100,107,109,97,59,44
2021 0 54 빈센조 704 3 0,35,229,182,165,29,13,13,16,8,5,6
2021 0 55 나히아 703 8 25,24,26,31,40,54,84,120,96,106,53,42
2021 0 56 아이패드 프로 5세대 701 5 9,13,11,36,165,117,110,73,56,46,35,27
2021 0 57 레이브 681 3 12,10,182,140,60,82,45,43,38,26,21,20
2021 0 58 틱톡 이벤트 648 8 23,17,3,1,3,3,34,541,12,4,3,1
2021 0 59 삼쩜삼 614 5 102,19,12,35,185,67,35,40,40,32,29,14
2021 0 60 미인정 결과 605 6 23,14,70,90,70,104,42,34,46,34,47,28
2021 0 61 에렌 604 1 141,130,101,58,47,29,28,24,17,13,13,3
2021 0 62 카리나 601 10 20,16,17,18,37,52,79,57,31,104,92,76
2021 0 63 송강 601 1 195,75,70,35,23,31,47,51,18,23,15,14
2021 0 64 버팀목자금 598 3 135,48,159,93,49,55,25,20,7,1,3,0
2021 0 65 아이폰 13 pro 582 10 1,0,0,0,2,1,3,7,57,220,156,133
2021 0 66 경이로운 소문 578 1 382,98,22,10,7,9,11,6,6,12,5,9
2021 0 67 렌고쿠 571 4 12,52,80,128,79,40,27,21,22,75,20,13
2021 0 68 아이폰13 미니 559 10 1,0,0,1,3,2,2,5,52,192,160,139
2021 0 69 애플워치7 554 10 0,1,1,3,4,10,10,25,36,202,146,113
2021 0 70 미10 548 11 7,8,7,8,8,9,19,38,15,106,202,117
2021 0 71 브레이브걸스 541 3 0,2,171,121,53,67,37,28,23,17,12,7
2021 0 72 바이비트 533 9 4,9,16,20,50,58,52,73,87,72,46,43
2021 0 73 미스트롯2 498 1 226,158,76,10,9,6,4,1,1,0,1,1
2021 0 74 오늘부터 신령님 478 8 52,38,19,13,34,74,72,79,23,27,22,22
2021 0 75 철인 477 2 146,199,43,16,11,11,11,9,7,8,5,9
2021 0 76 요소수 474 11 13,9,11,9,11,13,11,7,12,23,301,51
2021 0 77 비수도권 463 7 40,84,35,17,5,12,92,62,23,25,15,51
2021 0 78 알고있지만 462 7 7,1,5,5,6,86,162,133,20,11,14,8
2021 0 79 펜트하우스 2 457 3 36,148,196,45,8,7,3,4,5,0,1,1
2021 0 80 전면등교 451 8 0,2,1,1,20,61,54,165,52,23,39,31
2021 0 81 동물의숲 포켓캠프 443 4 0,1,109,219,43,14,16,13,5,10,7,3
2021 0 82 z폴드 438 8 16,11,14,20,13,12,23,149,66,42,34,36
2021 0 83 2021 근로장려금 436 8 16,10,31,14,87,59,26,141,20,5,5,18
2021 0 84 펜싱 430 8 4,3,7,2,5,9,150,167,33,21,13,12
2021 0 85 김승리 428 1 118,49,25,13,18,16,37,23,23,24,37,43
2021 0 86 대선후보 427 11 5,5,5,6,2,12,26,42,57,77,102,86
2021 0 87 에스파 윈터 426 10 7,5,8,3,26,37,44,31,13,96,88,66
2021 0 88 김연경 407 8 4,18,10,8,7,7,30,221,51,29,15,5
2021 0 89 에어팟3 402 12 5,4,9,13,10,6,8,16,28,31,133,136
2021 0 90 공모주 청약 398 4 6,15,47,85,22,7,82,42,39,23,13,15
2021 0 91 카카오 웹툰 397 8 2,3,0,2,2,1,9,195,55,63,37,26
2021 0 92 모델링팩 383 1 144,102,33,17,11,15,15,14,10,6,7,7
2021 0 93 철인왕후 382 2 124,181,37,8,4,5,3,3,3,3,3,6
2021 0 94 84년생 380 3 3,19,139,91,76,19,7,9,3,5,4,2
2021 0 95 클럽하우스 377 2 1,276,43,10,12,7,7,6,1,3,6,3
2021 0 96 싱어게인 374 2 82,165,30,11,9,8,4,5,1,3,5,48
2021 0 97 인스타 협찬 365 11 11,4,7,10,13,15,32,63,42,40,79,47
2021 0 98 모범택시 357 5 2,1,4,94,145,40,8,32,12,6,6,3
2021 0 99 윤석렬 353 12 1,5,15,6,14,25,38,27,43,40,66,70
2021 0 100 쿠팡플레이 351 12 15,10,15,16,18,31,28,34,34,49,34,64
==================================================