inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

맥스터치포인트 "0"으로 변경되요?

미해결

파이썬 셀레니움 고급편 (python selenium - 크롤링, 크롤러)

크롤링시 첫페이지~2페이지등에는맥스터치포인트 값이 "1또는5" 로 설정되고 이후 페이지이동등의 경우 뷰탭클릭, 이미지탭클릭, 쇼핑탭클릭, 링크클릭후새탭으로이동, 링크클릭후새창으로이동 할때 맥스터치포인트 값이 "0" 으로 되면서 플랫폼 값도 "win32"로 바뀌는 현상이 있습니다. 이런경우는 어떻게해야하는가요? 방법이 있다면 조언부탁드립니다.

  • 웹-크롤링
  • selenium
  • cdp
nions 댓글 3 좋아요 1 조회수 692

16분 50초 부근 출력 오류 확인 요청

미해결

[리뉴얼] 파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)

아래와 같이 실행을 했는데 오류가 발생합니다. 어떤 이유일까요?

  • python
  • 웹-크롤링
joonimooni 댓글 1 좋아요 0 조회수 348

10페이지 이후로는 출력이 안됩니다

미해결

[신규 개정판] 이것이 진짜 크롤링이다 - 기본편

for i range() 를 사용하여 여러 페이지를 출력할 때 9페이지까지는 문제 없이 출력 되는데 10페이지 이후로는 print(f"{pageNum}페이지입니다.===")는 정상 출력 되지만 페이지 내용은 못 가져옵니다 for range 를 거치지 않고 따로 101이나 111처럼 특정 페이지의 start 값을 넣었을 땐 출력이 돼서 무엇이 문제인지 모르겠습니다

  • python
  • 웹-크롤링
김경환 댓글 2 좋아요 0 조회수 351

사용자가 특정 버튼 클릭 후 크롤링하는 로직 작성하는 방법

미해결

실습으로 끝장내는 웹 크롤링과 웹 페이지 자동화 & 실전 활용

안녕하세요 강사님. 모든 강의를 수강한 이후에 왜 처음에 beautiful soup로 시작해서 selenium으로 끝이 나는지 절실하게 깨달을 수 있었습니다. 가르쳐 주신 예제를 바탕으로 개인적으로 추가 실습을 진행하면서 크롤링에 대한 이해를 높이려고 하는데 selenium의 경우 특정 버튼을 클릭하여 넘어간 이후에 크롤링이 진행되도록 자동화에 맞추어져 있는 라이브러리임을 알 수 있었습니다. 네이버 예제 화면에 있는 메일, 카페, 블로그, 쇼핑, 뉴스, 증권, 부동산, 지도, 웹툰이 모여져 있는 배너에서 사용자가 특정 버튼을 눌렀을 때 이동한 해당 페이지에서 크롤링을 진행할 수 있도록 자동화하는 예제를 스스로 만들어 공부 중인데 이러한 경우에서 if 메일 if 카페 if 블로그 같은 분기를 바탕으로 작성한 로직 대신 동적으로 사용자가 클릭했을 때의 정보를 가져올 수 있도록 하는 방법이 있을까요? 수많은 버튼이 존재하게 된다면 사용자가 어떤 버튼을 누를지 xpath라던가 class를 특정할 수 없는 경우가 생길 수 있을 것 같아서 질문 드립니다..!

  • python
  • 웹-크롤링
  • selenium
  • beautifulsoup
맑은새벽 댓글 1 좋아요 0 조회수 483

크롬드라이버 업데이트 관련

미해결

[신규 개정판] 이것이 진짜 크롤링이다 - 기본편

안녕하세요. 스타트 코딩님, 크롬 버전(Version 116.0.5845.96)을 업그레이드 한 이후로 셀레니움을 통해 크롬 드라이버를 자동으로 Install 하지 못하는 상황이 반복되고 있습니다. 이 경우에는 어떻게 해야 될까요? from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys # 크롬 드라이버 자동 업데이트 from webdriver_manager.chrome import ChromeDriverManager import time import pyautogui import pyperclip # 브라우저 꺼짐 방지 코드 chrome_options = Options() chrome_options.add_experimental_option("detach", True) # 불필요한 에러 메세지 없기 chrome_options.add_experimental_option("excludeSwitches", ['enable-logging']) servie = Service(executable_path=ChromeDriverManager().install()) driver = webdriver.Chrome(service=servie, options=chrome_options) driver.get("https://shopping.naver.com/home")

  • python
  • 웹-크롤링
logan1i 댓글 1 좋아요 0 조회수 514

[질문]Google Colab 코드 작성(3) - (네이버리뷰) 코드 분석 및 코드 작성

미해결

일잘하는 마케터, MD에게 꼭 필요한 파이썬 데이터 분석

안녕하세요. 전체 리뷰 페이지 수가 53개일 때는 코드를 어떻게 짜야 하나요...? 페이지가 반복되어 크롤링 되는데 문제점이 뭔지 모르겠습니다ㅠㅠ

  • python
  • 웹-크롤링
chanju9910 댓글 1 좋아요 0 조회수 419

주피터 노트북에서 엑셀 파일 만들 때, utf-8 인코딩

미해결

[리뉴얼] 파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)

안녕하세요 주피터노트북으로 엑셀파일을 만들 때, 항상 utf-8로 인코딩해야 한다고 합니다. chatgpt 를 이용해 인코딩을 진행했지만, 여전히 똑같은 문제가 발생합니다. 혹시 어떤 부분을 고치거나 개선해야 '주피터 노트북에서 엑셀파일을 보고, 또 엑셀파일에 컴퓨터에 저장되는지' 알 수 있을까요?

  • python
  • 웹-크롤링
김상희 댓글 1 좋아요 0 조회수 600

2023.08.18 정상 동작하는 코드 공유

미해결

[신규 개정판] 이것이 진짜 크롤링이다 - 기본편

현재 정상적으로 동작하는 코드는 아래와 같습니다 <02_셀레니움_무한스크롤.py> from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.chrome.options import Options import time # 브라우저 꺼짐 방지 chrome_options = Options() chrome_options.add_experimental_option("detach", True) # 불필요한 에러 메시지 없애기 chrome_options.add_experimental_option("excludeSwitches", ["enable-logging"]) # 브라우저 생성 browser = webdriver.Chrome(options=chrome_options) # 웹 사이트 열기 browser.get('https://www.naver.com') # 쇼핑 메뉴 클릭하기 browser.find_element(By.CSS_SELECTOR, ".service_icon.type_shopping").click() time.sleep(2) # 새창을 바라보게 만들기 new_window = browser.window_handles[1] browser.switch_to.window(new_window) # 화면 최대화 해야지 검색창이 보임 browser.maximize_window() # 검색창 클릭 search = browser.find_element(By.CSS_SELECTOR, "input._searchInput_search_text_3CUDs") search.click() # 검색어 입력 search.send_keys("아이폰13") search.send_keys(Keys.ENTER) # 스크롤 전 높이 before_h = browser.execute_script("return window.scrollY") # 무한 스크롤 while True: # 맨 아래로 스크롤 내린다. browser.find_element(By.CSS_SELECTOR, "body").send_keys(Keys.END) # 스크롤 사이 페이지 로딩 시간 time.sleep(1) # 스크롤 후 높이 after_h = browser.execute_script("return window.scrollY") if after_h == before_h: break before_h = after_h # 상품 정보 div items = browser.find_elements(By.CSS_SELECTOR, ".product_item__MDtDF") for item in items: name = item.find_element(By.CSS_SELECTOR, ".product_title__Mmw2K").text try: price = item.find_element(By.CSS_SELECTOR, ".price_num__S2p_v").text except: price = "판매중단" link = item.find_element(By.CSS_SELECTOR, ".product_title__Mmw2K > a").get_attribute('href') print(name, price, link) <03_csv파일로저장하기.py> from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.chrome.options import Options import time import csv # 브라우저 꺼짐 방지 chrome_options = Options() chrome_options.add_experimental_option("detach", True) # 불필요한 에러 메시지 없애기 chrome_options.add_experimental_option("excludeSwitches", ["enable-logging"]) # 브라우저 생성 browser = webdriver.Chrome(options=chrome_options) # 웹 사이트 열기 browser.get('https://www.naver.com') # 쇼핑 메뉴 클릭하기 browser.find_element(By.CSS_SELECTOR, ".service_icon.type_shopping").click() time.sleep(2) # 새창을 바라보게 만들기 new_window = browser.window_handles[1] browser.switch_to.window(new_window) # 화면 최대화 해야지 검색창이 보임 browser.maximize_window() # 검색창 클릭 search = browser.find_element(By.CSS_SELECTOR, "input._searchInput_search_text_3CUDs") search.click() # 검색어 입력 search.send_keys("아이폰13") search.send_keys(Keys.ENTER) # 스크롤 전 높이 before_h = browser.execute_script("return window.scrollY") # 무한 스크롤 while True: # 맨 아래로 스크롤 내린다. browser.find_element(By.CSS_SELECTOR, "body").send_keys(Keys.END) # 스크롤 사이 페이지 로딩 시간 time.sleep(1) # 스크롤 후 높이 after_h = browser.execute_script("return window.scrollY") if after_h == before_h: break before_h = after_h # 파일 생성 f = open(r"C:\source\startcoding\startcoding_crawling\03_네이버_쇼핑_크롤링\data.csv", 'w', encoding='CP949', newline='') csvWriter = csv.writer(f) # 상품 정보 div items = browser.find_elements(By.CSS_SELECTOR, ".product_item__MDtDF") for item in items: name = item.find_element(By.CSS_SELECTOR, ".product_title__Mmw2K").text try: price = item.find_element(By.CSS_SELECTOR, ".price_num__S2p_v").text except: price = "판매중단" link = item.find_element(By.CSS_SELECTOR, ".product_title__Mmw2K > a").get_attribute('href') print(name, price, link) csvWriter.writerow([name, price, link]) f.close()

  • python
  • 웹-크롤링
스타트코딩 댓글 1 좋아요 0 조회수 564

2023.08.18 기준 정상 동작하는 코드 공유

미해결

[신규 개정판] 이것이 진짜 크롤링이다 - 기본편

네이버 쇼핑이 예제 중에 가장 많이 업데이트 되네요 ㅎㅎ 강의 리뉴얼하면서 얘는 무조건 빼야되겠습니다. 현재 시점에서 잘 동작하는 코드입니다 코드에 대한 설명은 주석으로 달아놓았으니 학습에 참고해 보세요 from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.chrome.options import Options import time # 브라우저 꺼짐 방지 chrome_options = Options() chrome_options.add_experimental_option("detach", True) # 불필요한 에러 메시지 없애기 chrome_options.add_experimental_option("excludeSwitches", ["enable-logging"]) # 브라우저 생성 browser = webdriver.Chrome(options=chrome_options) # 웹 사이트 열기 browser.get('https://www.naver.com') # 쇼핑 메뉴 클릭하기 browser.find_element(By.CSS_SELECTOR, ".service_icon.type_shopping").click() time.sleep(2) # 새창을 바라보게 만들기 new_window = browser.window_handles[1] browser.switch_to.window(new_window) # 화면 최대화 해야지 검색창이 보임 browser.maximize_window() # 검색창 클릭 search = browser.find_element(By.CSS_SELECTOR, "input._searchInput_search_text_3CUDs") search.click() # 검색어 입력 search.send_keys("아이폰13") search.send_keys(Keys.ENTER)

  • python
  • 웹-크롤링
스타트코딩 댓글 1 좋아요 2 조회수 466

div id 값이 없을 경우 어떻게 찾을 수 있을가요?

미해결

[신규 개정판] 이것이 진짜 크롤링이다 - 기본편

항상 많은 도움을 받고 있습니다 너무 감사드립니다. 수업을 따라서 하다가 네이버에 [스포츠]버튼을 찾아보려고 했는데 여긴 아이디 값이 없더라구요 소스창에서 복사한 값은 아래와 같습니다. <a href="#" class="ContentHeaderView-module__tab___uYoNi" role="tab" aria-selected="false">스포츠</a> 이런 경우 어떻게 해야하는지 너무 궁금해요

  • python
  • 웹-크롤링
최민호 댓글 1 좋아요 0 조회수 708

네이버 부동산 크롤링 문의드립니다.

미해결

내 업무를 대신 할 파이썬(Python) 웹크롤링 & 자동화 (feat. 주식, 부동산 데이터 / 인스타그램)

안녕하세요 좋은 강의 잘 듣고 있습니다. 네이버 부동산 크롤링 관련하여 문의드리려고 하는데요, 특정 url에 대해 get을 통해 데이터를 받아올 때 특정 횟수 이상 요청을 반복하면 네이버에서 거절을 하는 것 같습니다. (특정 횟수 후 res = get(url, headers = headers) 후 res.text를 찍어보면 "페이지를 찾을 수 없습니다."라는 식의 내용으로 바뀜) 앞선 질문 중에 retry 라이브러리 이용하여 해결했다는 사례를 봤고, headers 변수 내의 일부 key에 대한 Value를 변경하면 다른 주체(?)로 서버가 인식하여 다시 응답을 준다라고 이해했습니다. 여러 Location에 있는 pc로 각각의 header 정보를 확인해보니 대부분의 내용은 동일하였으나 [Authorization, Referer] 정도가 다른 Value를 갖더라구요. 따라서 최초 시도 후 서버로부터 Block 발생 시 다른 pc에서의 header 정보로 수정하여 다시 get을 시도했는데 여전히 동일한 block이 발생하고 있습니다. 질문입니다. header 정보의 일부 Key에 대한 Value를 임의로 수정했는데 서버에서 동일한 요청으로 판단할 수가 있나요? 즉 헤더 정보보다 상위의 메타 데이터가 있나요? 혹은 제가 header 정보 수정을 잘못 했다던지 등의 조언 부탁드립니다. 감사합니다.

  • python
  • 웹-크롤링
gaol.sgkb 댓글 1 좋아요 0 조회수 1076

액션체인 부분.. 스크롤..

미해결

파이썬 셀레니움 고급편 (python selenium - 크롤링, 크롤러)

해당 부분에서 액션체인 scroll이 오류가 나네요. 제가 뭘 놓친걸까요 ?

  • 웹-크롤링
  • selenium
  • cdp
JH CHOI 댓글 1 좋아요 1 조회수 722

네이버 view탭 검색 결과 크롤링 2, 3 질문

미해결

실습으로 끝장내는 웹 크롤링과 웹 페이지 자동화 & 실전 활용

안녕하세요 강사님. 질문이 있어서 남기게 되었습니다. 첫 번째 질문: 네이버 view탭 검색 결과 크롤링 2를 완료한 이후 아래 코드 실행 후 손흥민을 검색했는데 검색결과가 30개가 아닌 7개가 출력되었습니다. 이러한 이슈 때문인지 네이버 view탭 검색 결과 크롤링 3 강의가 정상적으로 진행되지 않습니다. import requests from bs4 import BeautifulSoup # beautiful soup 라이브러리 import base_url = "https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=0&ie=utf8&query=" keyword = input("검색어를 입력하세요 : ") url = base_url + keyword print(url) headers = { "User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36" } # dictionary req = requests.get(url, headers = headers) # GET 방식으로 naver에 요청 html = req.text # 요청을 하여 html을 받아옴 soup = BeautifulSoup(html, "html.parser") # html을 html.parser로 분석(클래스를 통한 객체 생성) total_area = soup.select(".total_area") timeline_area = soup.select(".timeline_area") if total_area: areas = total_area elif timeline_area: areas = timeline_area else: print("class 확인 요망") for area in areas: title = area.select_one(".api_txt_lines.total_tit") name = area.select_one(".sub_txt.sub_name") print(name.text) print(title.text) print(title["href"]) print() print(len(areas)) 두 번째 질문: 네이버 view탭 검색 결과 크롤링 3을 진행하면서 아래 코드처럼 작성하고 손흥민을 검색했을 때 NoneType 오류가 발생합니다. 첫 번째 질문의 이슈로 인해 그런 것인가요? .total_wrap.api_ani_send 클래스가 브라우저 상에서는 30개가 잘 나오는데 제대로 안 받아와진 것 같은 느낌이 듭니다. 도와주시면 감사하겠습니다 ㅠㅠ Traceback (most recent call last): File "C:\python_web_crawling\01_4_naver.py", line 30, in <module> print(title.text) ^^^^^^^^^^ AttributeError: 'NoneType' object has no attribute 'text' 아래는 코드입니다. import requests from bs4 import BeautifulSoup # beautiful soup 라이브러리 import base_url = "https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=0&ie=utf8&query=" keyword = input("검색어를 입력하세요 : ") url = base_url + keyword print(url) headers = { "User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36" } # dictionary req = requests.get(url, headers = headers) # GET 방식으로 naver에 요청 html = req.text # 요청을 하여 html을 받아옴 soup = BeautifulSoup(html, "html.parser") # html을 html.parser로 분석(클래스를 통한 객체 생성) items = soup.select(".total_wrap.api_ani_send") for area in items: # ad = area.select_one(".link_ad") # if ad: # print("광고입니다.") # continue title = area.select_one(".api_txt_lines.total_tit") name = area.select_one(".sub_txt.sub_name") print(title.text) print(name.text) # print(title["href"]) print() #print(len(items))

  • python
  • 웹-크롤링
  • selenium
  • beautifulsoup
맑은새벽 댓글 1 좋아요 1 조회수 821

Atom 에디터 관련

미해결

파이썬 입문 및 웹 크롤링을 활용한 다양한 자동화 어플리케이션 제작하기

강의 내용중에 Atom 에디터를 다운받아서 사용하는 내용이 있는데 서비스를 종료해서 이제 다운받을 수가 없습니다. 강의내용대로 실습이 불가능한데 어떻게 해야 할까요?

  • python
  • 웹-크롤링
임재경 댓글 1 좋아요 0 조회수 376

네이버 쇼핑 검색 input type text 클릭 안되는 부분

해결됨

[신규 개정판] 이것이 진짜 크롤링이다 - 기본편

강의에서는 네이버 -> 쇼핑 버튼 클릭 시 현재 창이 네이버 쇼핑으로 전환되어 예제가 정상 동작하고 있었습니다. 현재 시점에서 네이버 -> 쇼핑 버튼 클릭 시 새 탭이 생기면서 문제가 발생하고 있었습니다. https://www.naver.com 이 실행되어있는 첫번째 탭에서 두번째 탭에 있는(네이버 쇼핑) input type text에 해당하는 selector를 검색하고 있으니 어떤 동작도 하지 않는 것으로 보이는 것 같습니다. 해당 소스 내에서 활성화된 탭을 마지막 탭으로 이동시키는 소스를 집어넣으면 나머지 뒷 부분이 정상적으로 동작하는 것 같습니다. 강의 들으시는 분들은 참고하시면 좋을 것 같습니다.

  • python
  • 웹-크롤링
안티와디스펠 댓글 1 좋아요 2 조회수 440

주피터 실행 안되는 문제

미해결

[리뉴얼] 파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)

아나콘다 내비게이터에서 주피터 노트북이 실행이 안됩니다. launch버튼을 누르면 로딩이 되다가 그냥 그대로 반응 없이 아무 화면도 뜨지를 않습니다..

  • python
  • 웹-크롤링
영호 염 댓글 3 좋아요 0 조회수 25807

네이버쇼핑 검색창 클릭

미해결

[신규 개정판] 이것이 진짜 크롤링이다 - 기본편

크롬 버전 15입니다. 네이버 쇼핑 클릭까지는 됩니다. 네이버 쇼핑 접속 후에 쇼핑 검색창 selector을 하고 싶은데 네이버 쇼핑이 많이 바껴 selector이름?이 무엇인지 잘 모르겠어요 ㅠ.. 혹시 현재 네이버 쇼핑의 검색창이 무엇인지 알수 있을 까요? 오른쪽 마우스>copy>copy selector 클릭하면 #gnb-gnb > div._gnb_header_area_150KE > div > div._gnbLogo_gnb_logo_3eIAf > div > div._gnbSearch_gnb_search_3O1L2 > form > div._gnbSearch_inner_2Zksb > div > input 이렇게 나옵니다.

  • python
  • 웹-크롤링
배키 댓글 2 좋아요 0 조회수 636

페이지 출력 오류

미해결

[신규 개정판] 이것이 진짜 크롤링이다 - 기본편

페이지마다 뉴스 제목 가져오는데 오류가 있습니다 2페이지 : 1페이지 마지막 뉴스 ~ 2페이지 마지막에서 두번째 뉴스 3페이지 : 2페이지 마지막 뉴스 ~ 3페이지 마지막에서 두번째 뉴스 이런식으로 페이지가 약간 틀립니다. 또, 10페이지는 아예 나오지가 않습니다.

  • python
  • 웹-크롤링
배키 댓글 2 좋아요 0 조회수 302

python-question2-web 28번, strip( ) 함수 사용법

미해결

[리뉴얼] 파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)

안녕하세요 선생님, 문제를 풀며 빠르게 익숙해지는 파이썬 기본 : 문자열, 리스트, 조건문 활용 중 28번 문제 질문 드립니다. strip ( ) 함수 사용 관련입니다 ! 28. 문자열 인덱싱과 조건문 저는 중첩된 if문과 문자열 인덱싱을 이용해 다음과 같이 작성하였고, 정답이 나오는 걸 확인했습니다. 두 번째 풀이를 생각하던 중 strip( ) 함수를 이용해봐야겠다 생각해서, 다음과 같이 작성해보았습니다. 출력이 -가 제거된 형태로 나올 꺼라 생각했는데, -가 제거되지 않아 질문드립니다. 제가 strip ( ) 함수를 잘못 작성한 걸까요..??

  • python
  • 웹-크롤링
jjanie 댓글 1 좋아요 0 조회수 396

파이썬 입문 강의 _ python-question2-web 중 질문입니다.

미해결

[리뉴얼] 파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)

안녕하세요 선생님, 좋은 강의 늘 감사드립니다. 문제를 풀며 빠르게 익숙해지는 파이썬 기본 : 문자열, 리스트, 조건문 활용 중 질문입니다. 20번 저는 문자열 인덱스와 if문, int ( ) 타입 변환을 이용하여 다음과 같이 작성했고, 정답이 출력 되는 것을 확인했습니다. 그리고 위 코드 중 변수 gender을 int 타입으로 변환하지 않는 경우 를 생각해보았고, 오류가 날 것이라고 생각했습니다. 하지만 아래와 같이 정답은 출력 되지 않았지만, 코드 오류가 나지는 않았습니다. 그 이유를 다음과 같이 작성해봤는데, 제 생각이 맞는지 확실치 않아 질문 드리게 되었습니다. int 타입 변환을 해주지 않았으므로 gender은 string 타입이다. string 타입인 gender은 1 , 3 과 같은 int 타입과 비교 자체가 불가 하므로 if-else문에서 if가 아닌 else문으로 넘어가게 되고, 언제나 '여자입니다'가 출력 된다. (숫자가 아닌, 900326-&063210처럼 특수 문자를 넣어도 '여자입니다'가 출력된다)

  • python
  • 웹-크롤링
jjanie 댓글 1 좋아요 0 조회수 318

인기 태그

인프런 TOP Writers

주간 인기글