전체 스터디
전체 스터디
  • 전체보기
  • 질문
  • 숙제
내 스터디
  • 스터디에 참여해보세요!
다른 스터디
  • 파이썬 기초 스터디
  • 네이버 정복 파이썬 크롤링
  • 페이스북 만드는 웹개발
  • 데이터사이언스 12시간 입문기
  • 파이썬 구글 Sheet 연동
  • 엑셀서당 - 훈장님의 기초 엑셀 트레이닝
  • 고전게임을 만들며 배우는 코딩의 기초
  • 내 업무를 거의 자동화하는 방법
  • SQL 입문 4시간
  • QR 코드 프로그래밍
  • 비전공자 개발지식 총정리
  • 초고속 퍼포먼스 마케터
  • 왓챠 함께 만들기
  • 퍼블리셔 초고속 입문기
  • 한국형 커뮤니티 만들기
  • airbnb 프론트엔드 카피 프로젝트
  • 워드프레스로 쿠팡 만들기
김희수
12월 23일 14:26 · 동국)파뿌리 part1

week4 challenge2에서 

3. n_estimators가 10일 때, 3000일 때 아래 항목들이 어떻게 다른가요? 속도 [ ] 정확도 [ ]

여기서 속도를 수치적으로 출력하고 싶습니다.

즉, 실제로 10일때하고 3000일때는 속도차이가 느껴지지만 주피터노트북cell내에서 이 두 경우의 실행속도를 보이게 하고 싶습니다.

자세히 보기
최도근
12월 26일 11:09

cell 상단에 %%time이라고 입력하신 후 진행해보세요.

예를들어,

print('Hello World~')
# 다른 코드들
print('accuracy: ...')

이러한 셀이 있다면, 

%%time
print('Hello World~')
# 다른 코드들
print('accuracy: ...')

이렇게 변경하시면 해당 셀의 실행시간을 체크하실 수 있습니다.

좋아요 0
    이정수
    12월 2일 20:34 · 건국)코덕이 part2

    이해가 안되는 부분이 있어 질문올립니다!

    질문1.

     Stage 3에서 feature engineering을 마친 데이터를 통해 만든 train 데이터 프레임으로 학습을 시킬때 왜 pclass는 포함을 시키지 않나요? 또 Age특성은 구간을 나누어 주었는데 Fare 값들은 구간을 나누지 않고 바로 사용하나요? 


    질문2.

    Stage3 온라인 북에서 재실행하면 valid set accuracy가 바뀌는 이유가 뭔가요? valid set와 train set는 고정값이기 때문에 컴퓨터가 만들어낸 모델도 고정값일텐데 그러면 accuracy도 바뀌지 않아야하는 거 아닌가요?

    자세히 보기
    최도근
    12월 5일 17:43

    정수님 안녕하세요~ 깊게 탐구하고 있는 모습 보기 좋아요ㅎㅎ

    1-1. pclass는 중요한 특징일 확률이 높으며 포함하여 분석을 진행할 수 있습니다. 다만 공부초반이므로 학습 흐름상 제외하였습니다. 이후 수준을 높여 직접 추가하고 여러가지 방식으로 정확도를 높여보시면 됩니다(과제) 

    1-2. Age처럼 Fare도 나누어 줄 수 있습니다. 그렇게 하는 것이 분석에 용이하다고 판단한다면 그렇게 진행하면 됩니다. 나누는게 좋을 수도 있고 나누지 않는게 좋지 않을 수도 있습니다. 이것은 오로지 분석자에게 달려있습니다. 실제로는 정교하게 나눈다면 아주 약간의 성능 향상이 기대되고, 그렇게 하지 못한다면 분석 모델의 성능은 떨어집니다. 공부과정에서는 범위나누는 아디이어를 배워보기 위해 간단하게 나마 Age를 대상으로 실습해보았습니다.

    이제 막 처음 데이터분석을 공부하시는 분들을 위해 최대한 간략하게 실습을 해본것이며, 정수님처럼 주도적으로 의심하고 고민하면서 여러가지 방식으로 성능을 높여보길 기대합니다:) 

    2. 두가지 상황에서 정확도가 바뀔 수 있습니다.
    A) train, valid set이 새롭게 정의되었을 때(train set split 기능은 매실행시마다 셋을 랜덤으로 섞어 다시 정의합니다.)
    B) 학습을 새롭게 진행하였을 때(데이터셋이 똑같아도 내부에서 생성되는 트리는 모양이 다를 수 있습니다. 어느정도 랜덤성에 기인하여 트리가 생성됩니다.)

    따라서 두가지 실행시점마다 값이 변경될 수 있습니다.

    좋아요 1
    이정수
    12월 26일 16:42

    친절한 답변 감사합니다!!

    좋아요 0
      고경태
      11월 24일 15:17 · 연세)데마초 part2

      쥬피터에서 pandas 라이브러리를 임포트하는데 에러가 떠서요.

      구글링해봐도 어떻게 해야할 지 모르겠더라구요 ㅠㅠ 

      파이참에서는 잘 임포트 되던데 왜 그런지 모르겠네요.  

      아나콘다 삭제하고 다시 깔아봐도 해결이 안돼요 ㅠㅠ

      자세히 보기
      최도근
      11월 29일 10:23

      pandas가 제대로 설치안된게 원인입니다.

      해법은 완벽하게 아나콘다를 삭제하고, 재설치하는거구요. 재설치할 때 클릭하는 옵션을 인스톨메뉴얼에 따라 정확히 눌러주셔야 합니다.

      동일한 문제를 겪던 다른 모든 분들이 2~3번 정도 재설치하셔서 해결하셨는데 도저히 안되신다면 현장에서 도움드려야 할 것 같아요. 사실 저도 뾰족한 수는 없고 깔끔하게 삭제 후 재설치하는게 다거든요

      좋아요 0
        김재원
        11월 23일 17:46 · 연세)데마초 part1

        안녕하세요, 크롤링 복습을 하다가 궁금한 점이 생겨 질문드립니다.


        https://www.amazon.com/The-Firm/dp/B002PE36VO/ref=sr_1_1?Adv-Srch-Books-Submit.x=30&Adv-Srch-Books-Submit.y=11&qid=1574496859&refinements=p_66%3A044021145X&s=books&sr=1-1&unfiltered=1


        아마존 도서 검색 사이트인데요,

        여기에서 줄거리 요약본을 가져오고 싶은데 아무리 태그를 바꿔서 시도해봐도 줄거리가 가져와지지 않습니다ㅠㅠ iframe 문제인 것 같은데  어떻게 해결할 수 있는지 모르겠습니다ㅠㅠ

        (예를 들어, 위 사이트에서는 At the top of his class at Harvard Law~부터의 줄거리)


        혹시 해결 방안을 아신다면 알려주시면 감사하겠습니다~!

        자세히 보기
        최도근
        11월 29일 10:21

        재원님 안녕하세요!

        혼자해결 하기 정말 어려운 문제인데 원인을 잘 찾아내셨네요.

        맞아요, 아이프레임 때문입니다.
        아이프레임은 홈페이지 안에 또다른 홈페이지를 넣는 구조입니다.

        즉 저 페이지에는 Main페이지와, A(iframe1), B(iframe2), C... 등등의 다른 페이지도 함께 존재해요. 크롤링을 위해 접속하는 페이지는 항상 Main 페이지를 기준으로 설정되어 있어서, 우리가 수집할 페이지를 '바꾼다'와 같은 명령을 추가적으로 해줘야 합니다.

        줄거리 부분은 아이디가 bookDesc_iframe인 iframe 안에 존재하고 있네요.

        driver.switch_to.frame(driver.find_element_by_css_selector(해당 아이프레임의 셀렉터)) 

        즉 iframe#bookDesc_iframe을 저기에 넣은 후, 줄거리 요약본을 검색하신다면 원하는 결과를 얻으실 수 있을 거예요. 처음해보시면 시행착오가 있으실 수 있으니 해보고 안되면 또 질문 해주세요!


        좋아요 1
        한윤
        11월 17일 18:10 · 고려)코발트 part2

        Titanic 데이터처럼 테이블 형식으로 된 데이터 셋에서, 예측하고자 하는 feature(ex. 생존여부)에 각 feature(ex. 나이, 성별) 들이 영향을 미치는 정도를 수학적으로 계산해내는 이론이 있을까요??

        titanic 데이터 같은 경우는 사실 사고 당시에 아이들과 여성들을 먼저 구명보트에 태웠다는 사실을 바탕으로 생존에 중요한 영향을 끼치는 feature가 성별, 나이 임을 직관적으로 알 수 있었는데, 이러한 정보를 알지 못하는 데이터 셋에서는 그러한 feature 들을 어떻게 골라내는지 궁금합니다.

        자세히 보기
        최도근
        11월 18일 18:32

        가장 쉬운 방법으로 상관계수를 구할 수 있습니다. (pearson 계수) 곧 저희가 배울 내용이기도 합니다..!

        좋아요 0
          한윤
          11월 18일 19:02

          앗.. 배울 내용이었군요.. 죄송합니다. 답변 감사드립니다 !!

          좋아요 1
          김채림
          11월 16일 22:32 · 한양)코딩좀하냥 part1

          카카오 맵 검색 과정에서 이러한 코드를 작성하면,

          검색 버튼이 눌리지 않고 아래와 같은 에러코드가 뜨는데 저희가 어느 부분을 놓친건지 궁금합니다ㅠㅠ!


          element click intercepted: Element <button type="button" id="search.keyword.submit" class="go ico_search btn_search active">...</button> is not clickable at point (347, 91).

          자세히 보기
          최도근
          11월 18일 18:39

          button 선택자 부분을 button.btn_search.go 로 바꾼 다움에 재시도해보시겠어요? 확인 후 피드백 부탁드려요.

          좋아요 0
            한준혁
            11월 12일 21:15 · 명지)MRT part1

            안녕하세요. 6주차 stage2에서 셀레니움을 이용해서 데이터 수집하는 내용에서 질문드립니다. 


            1) 네이버 지도 신버전에서 검색하는 것까지는 구현을 했는데, 중간에 다음과 같은 오류가 발생합니다. 어디가 문제인건지 모르겠습니다 ... ㅠ

            Traceback (most recent call last):
              File "C:/Users/준혁/PycharmProjects/coala_crawling1/week6/week6_2(new version).py", line 17, in <module>
                search_box.send_keys("치킨")
              File "C:\Users\준혁\AppData\Local\Programs\Python\Python37-32\lib\site-packages\selenium\webdriver\remote\webelement.py", line 479, in send_keys
                'value': keys_to_typing(value)})
              File "C:\Users\준혁\AppData\Local\Programs\Python\Python37-32\lib\site-packages\selenium\webdriver\remote\webelement.py", line 633, in _execute
                return self._parent.execute(command, params)
              File "C:\Users\준혁\AppData\Local\Programs\Python\Python37-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
                self.error_handler.check_response(response)
              File "C:\Users\준혁\AppData\Local\Programs\Python\Python37-32\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
                raise exception_class(message, screen, stacktrace)
            selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document
              (Session info: chrome=78.0.3904.97)
            ## 여기부터는 제가 작성한 코드입니다.
            from selenium import webdriver
            from selenium.webdriver.common.keys import Keys
            import time
            
            # 1 웹드라이버 켜기
            driver = webdriver.Chrome("./chromedriver")
            
            # 2 네이버 지도 접속하기
            driver.get("https://map.naver.com/v5")
            
            # 3 검색창에 검색어 입력하기
            driver.find_element_by_css_selector("button#intro_popup_close").click()
            time.sleep(2)
            first_sb = driver.find_element_by_css_selector("span.span_search").click()
            search_box = driver.find_element_by_css_selector("input.input_search")
            time.sleep(2)
            search_box.send_keys("치킨")
            
            # 4 검색버튼 누르기
            search_box.send_keys(Keys.RETURN)
            # 지연 시간 추가
            time.sleep(2)
            
            # 5 검색 결과 확인하기
            
            # 컨테이너 : div.list_search div.search_box
            stores = driver.find_elements_by_css_selector("div.list_search div.search_box")
            
            for s in stores:
                # 이름(span.search_title_text)
                # 주소  (span.search_text.address)
                # 연락처 (span.search_text.phone)
            
                name = s.find_element_by_css_selector("span.search_title_text").text
                address = s.find_element_by_css_selector("span.search_text.address").text
                phone = s.find_element_by_css_selector("span.search_text.phone").text
            
                print(name)
                print(address)
                print(phone)
            
            driver.close()


            자세히 보기
            김지수
            11월 13일 02:13

            안녕하세요:) 답변이 마음에 드실지는 모르겠으나 답변 드립니다.

            아마도 페이지 로딩이 끝나기 전에 element를 참조해서 오류가 생긴 듯 합니다. driver.implicitly_wait나 WebDriverWait로 페이지 로딩이 끝날 때까지 대기한 후 호출하시거나, 

            # 3 검색창에 검색어 입력하기 

            driver.find_element_by_css_selector("button#intro_popup_close").click() 

            time.sleep(2) 

            first_sb = driver.find_element_by_css_selector("span.span_search").click() 

            search_box = driver.find_element_by_css_selector("input.input_search") 

            time.sleep(5) // 이 과정에서 delay를 많이 주면 페이지 로딩이 끝난 후 치킨을 검색하게 되므로 제 컴퓨터에서는 잘 실행이 되네요 :) 

            search_box.send_keys("치킨")

            좋아요 4
            김지수
            11월 13일 02:21

            살짝 TMI 같을 수도 있으나..

            time.sleep 은 무조건적인 시간 지연을 의미하지만, driver.implicitly_wait은 selenium에서만 사용되는 method로, time.sleep과 동일하게 driver.implicitly_wait(5) 의 식으로 적어줍니다.

            차이가 있다면 time.sleep은 정말 시간 지연의 의미만 있지만, driver.implicitly_wait은 설정한 시간 (예시로 5초) 이 지나도 브라우저에서 parsing이 끝나지 않으면 error message를 내보낸 뒤 프로그램을 종료하는 것이라고 하네요 !!

            저도 답변하면서 driver.implicitly_wait에 대해 배웠습니다 :)

            좋아요 5
            최진영

            안녕하세요:) 수업과 별개로 다른 사이트를 크롤링하다가 궁금한 점이 있어 질문드립니다.

             영화명이 나열된 목록의 페이지에서 '영화명'을 클릭하면 영화상세정보에 대한 팝업창이 뜨고 그 안에 있는 데이터를 크롤링을 하고 싶어서 href속성을 이용하려고 봤더니 #이라는 문자만 있고, 그 링크에 대한 정보는 onclick에 있는 것 같더라구요!

             그래서 onclick 속성을 이용해서 해당 버튼을 클릭하고 그 안의 내용을 크롤링하는 방법이 있는 지 궁금합니다!

            자세히 보기
            최도근
            11월 8일 10:06

            진영님 안녕하세요~

            href는 해당 주소로 이동하는 것이고, onclick은 그 안에 정의된 명령을 수행합니다. 주소이동 같은 경우 아주 쉽게 처리할 수 있는 일반적인 웹 프로세스입니다. 반면 onclick은 개발자가 마음대로 정의하는 프로그래밍 블럭으로 처리방법이 다소 까다롭습니다.

            이 부분은 selenium을 이용하여 일종의 로봇브라우저를 통해 6주 과정에서 함께 다뤄보니 조금만 기다려주세요:)

            좋아요 0
              김아원

              5주차과제

              정래훈
              11월 5일 21:44 · 서울)샬라샬라 part1

              5주차 숙제에서 값을 엑셀에 저장할 때 궁금한게 생겨 질문합니다!

              import requests
              from bs4 import BeautifulSoup
              import openpyxl
              
              wb = openpyxl.Workbook()
              sheet = wb.active
              sheet.append(['제목', '평점', '장르', '감독', '배우'])
              
              raw = requests.get("http://ticket2.movie.daum.net/Movie/MovieRankList.aspx",
                                 headers = {"User-Agent":"Mozilla/5.0"})
              html = BeautifulSoup(raw.text, 'html.parser')
              movies = html.select("div.desc_boxthumb")
              
              for m in movies:
                  title = m.select_one("strong.tit_join > a")
                  url = title.attrs["href"]
                  raw_each = requests.get(url, headers = {"User-Agent":"Mozilla/5.0"})
                  html_each = BeautifulSoup(raw_each.text, 'html.parser')
                  try:
                     container = html_each.select_one("div.movie_summary")
                     title = container.select_one("div.movie_summary strong.tit_movie").text
                     rate = container.select_one("em.emph_grade").text
                     genre_all = container.select_one("dd:nth-of-type(1)").text
                     director_all = container.select("dd:nth-of-type(5) a")
                     actor_all = container.select("dd:nth-of-type(6) a")
                  except:
                      print(title.text.strip(), "상세페이지가 없습니다.")
                      print("-" * 50)
                      continue
                  print("제목: \n" + title)
                  print("평점: \n" + rate)
                  print("장르: \n" + genre_all)
                  print("감독:")
                  for d in director_all:
                      print(d.text)
                  print("배우:")
                  for a in actor_all:
                      print(a.text)
                  print("-" * 50)
              
                  director = []
                  for d in director_all:
                      director.append(d.text)
                  director_string = ", ".join(director)
                  actor = []
                  for a in actor_all:
                      actor.append(a.text)
                  actor_string = ", ".join(actor)
              
                  sheet.append([title, rate, genre_all, director_string, actor_string])
              wb.save("daummovie.xlsx")

              감독과 배우처럼 해당되는 값이 많은 경우, 파이썬에 출력할 때는 리스트에서 각 요소를 추출해서 텍스트 파일로 변환해서 하나하나씩 출력했지만, 엑셀에 값을 저장할 때는 전체 값을 문자열로 변환해서 추가해야 하다보니 리스트 값을 추출해서 텍스트만 남기고 다시 리스트로 합쳐준 다음에 그 리스트를 문자열로 변환했습니다. 다만 방법이 너무 번거로운 것 같아 효율적인 방법이 있는지 알고 싶습니다!

              자세히 보기
              최도근
              11월 7일 10:29

              래훈님 안녕하세요~

              번거롭다 생각하시겠지만 사실 이미 좋은 방법을 적용하신 거구요.

              코드 양을 개선하고자 한다면 아래처럼 할 수 있겠네요.

              director_string = ""
              
              for d in director_all:
                director_string = director_string + d.text + ", "

              마지막에 ", "가 남는 문제는 문자열 슬라이싱 arr[:-2] 같은 방식으로 쉽게 처리할 수있습니다.

              좋아요 5
              정래훈
              11월 7일 12:19


              좋아요 1
              정래훈
              11월 7일 12:21

               친절한 답변 감사합니다!   :)

              좋아요 1
              김희수
              11월 3일 15:11 · 동국)파뿌리 part1

              5주차 challenge1에서 감독, 배우를 수집할 때, 리스트를 사용해서 다음과 같이 코드를 짜면 

              for movie in movies:
                  title = movie.select_one("h4 a").text.strip()
                  info = movie.select("div.txt-block")
                  director = info[0].select("span > a")
                  actor = info[1].select("div.txt-block > a")
               
              
                  print("제목:", title)
              
                  print("감독: ", end="")
                  for d in director:
                      print(d.text,end = " ")
              
                  print("\n배우: ",end="")
                  for a in actor:
                      print(a.text,end= " ")
              
                  print()
                  print("="*50)

              첫번째 사진처럼 잘 되는데 

              nth-of-type을 사용해서

              for movie in movies:
                  title = movie.select_one("h4 a").text.strip()
                  director = movie.select("div:nth-of-type(3) span > a")
                  actor = movie.select("div:nth-of-type(4) > a")
              
                  print("제목:", title)
              
                  print("감독: ", end="")
                  for d in director:
                      print(d.text,end = " ")
              
                  print("\n배우: ",end="")
                  for a in actor:
                      print(a.text,end= " ")
              
                  print()
                  print("="*50)

              두번째 사진처럼 감독 부분에 1 2 3 4...가 나온 후 감독 이름이 나오더군요. 왜 이럴까요?

              자세히 보기
              최도근
              11월 5일 10:43

              이 코드를 변경해보세요

              movie.select("> div:nth-of-type(3) span > a")


              원리설명

              아래와 같은 코드가 있습니다.

              <div class="test">
                <div>안녕1!</div>
                <div>안녕2!
                  <div>안녕2-a</div>
                </div>
                <div>안녕3!</div>
              </div>


              div.test 아래에 있는 세번째 div를 선택하고자 할 때
              div.test div:nth-of-type(3) 라고 작성하시겠죠?

              이때 예상되는 선택은 안녕3! 부분입니다.

              여기서 문제가 발생하는데요,
              실제로 test아래에서 3번째 div는 안녕3!이 아닌, 안녕2-a입니다.

              div.test 아래에는 총 4개의 자손 div가 있습니다.
              안녕1! / 안녕2! / 안녕2-a / 안녕3!

              div.test div:nth-of-type(3) 대신에
              div.test > div:nth-of-type(3)
              자식관계로 정의하면
              기대한 대로 안녕3!을 선택할 수 있습니다.

              div.test 아래에는 총 3개의 자식 div가 있기 때문입니다.
              안녕1! / 안녕2! (안녕2-a) / 안녕3!

              <span style="font-size: 1.2em;">
              </span>

              <span style="font-size: 1.2em;">자손/자식 관계를 설명하는 1주차를 다시 복습해보세요!</span>


              Q) 크롬에서 검색했을 땐 왜 제가 생각한것처럼 나오나요?

              html에는 굉장히 많은 규칙들이 존재하고 합의되지 않은 세부 문법들이 존재합니다. 이 문제에서의 nth-of-type이 그렇습니다. 크롬에서 선택자를 이용하는 것은 크롬팀이 규정한 문법을 따르고, 파이썬에서는 BeautifulSoup팀이 규정한 문법을 따르고 있는데 이 두팀간의 미세한 규칙차이가 존재했던 겁니다. (대부분의 규칙은 같으며 간혹 예외 존재)

              좋아요 0
                고한석
                11월 1일 18:11 · 경희)KHU알라 part1

                질문드립니다!

                1. csv파일을 열때 인코딩을 'UTF-8'로 할 경우 글자가 깨지고 'ANSI'로 할 때 안 깨지는데 이유가 있을까요?

                2. 위 질문과 연관된 에러같은데 네이버TV정보를 가져올 때 저렇게 데이터를 가져오다가 중간에서 오류가 발생합니다! 이유가 무엇인지 궁금합니다

                자세히 보기
                최도근
                11월 2일 11:58

                윈도우 환경에서 csv 파일에 한글 등이 포함된 데이터를 저장할 때 정말 자주 발생하는 문제입니다. 가장 쉬운 방법은 openpyxl로 접근하시는 거고 현우님이 답변주신것처럼 여러 인코딩 옵션을 직접 테스트해보셔야할 것 같습니다.

                방법이 없는 건 아닙니다..! 분명 해결가능한 문제이지만 컴퓨터마다, 다루는 데이터마다 다르기 때문에 그때그때 다른 조치가 필요합니다.

                좋아요 1
                고한석
                11월 1일 22:42

                encoding을 'utf-8'로 해봤는데 컴퓨터에 문제 원인이 있는지 utf-8로 하면 글자가 파일 글자가 다 깨져요.. 오히려 encoding="ANSI"는 읽을 수 있는 상황입니다ㅠ 

                좋아요 0
                  고한석
                  11월 1일 22:46

                  encoding을 UTF-8로 하면 데이터 수집은 되지만 글자가 다 깨지고 ANSI로 설정하면 

                  File "C:/Users/고한석/Desktop/KHU알라/Coala_Crawling/Week4/week4_3.py", line 34, in <module> 

                   f.write(title+','+chn+','+hit+','+like+'\n') File "C:\Users\고한석\AppData\Local\Programs\Python\Python37\lib\encodings\mbcs.py", line 25, in encode 

                   return mbcs_encode(input, self.errors)[0] 

                  UnicodeEncodeError: 'mbcs' codec can't encode characters in position 0--1: invalid character

                  다음과 같은 에러가 뜨는데 CSV말고 엑셀파일로 저장하는 방법밖에 없는건가요?

                  좋아요 0
                    댓글 2개 더보기
                    Minah Lee
                    10월 28일 18:15 · 건국)코덕이 part1

                    이렇게 코드를 쓰고 csv 파일을 열었더니 글자라 저렇게 깨집니다. 어떻게 해결할 수 있나요??

                    **코드가 잘렸는데 beautifulsoup 깔아 놓은 상태입니다


                    자세히 보기
                    이헌영
                    10월 30일 10:06

                    한글로 저장된 데이터의 경우에는 컴퓨터마다 한글을 인식하는 방법(encoding)이 달라서 문제가 발생하곤 합니다.

                    파일을 여는 부분에서 인코딩 옵션을 추가해주시거나,

                    f=open("파일이름", "w", encoding="UTF-8")

                    openpyxl을 활용해서 엑셀로 저장해보세요!!

                    좋아요 0
                      전휘목
                      10월 24일 09:37 · 연세)예솔아가자 part1

                      안녕하세요 코알라 선생님 질문드립니다.

                       사진과 같이 유튜브 플레이리스트 제목을 크롤링하려 하는데  

                      컨테이너를 첫번째 사진의 선택자를 선택하고 

                      타이틀을 아래 선택자로 선택했습니다만 결과가 나오지 않습니다.  

                      띄워진 곳을 나누고 . 으로 바꿔보아도 되지 않았습니다.

                       또한 저렇게 보이고 검사창 안에서 문자를 드래그해서 선택하는 거? 

                      그 방법은 클래스를 두 번 클릭한 다음 복사하는 것밖에 없는 것인가요?    

                      자세히 보기
                      최도근
                      10월 26일 10:19

                      1. 우선 선택자가 틀렸습니다.

                      ytd-grid-playlist-renderer.style-scope

                      첫번째 사진의 선택자는 이렇게 구성해야 합니다.

                      * 선택자규칙
                      태그명.클래스명
                      ex) 태그가 a 고 class가 test이므로 a.test
                      <a class="test" >~~~

                      2. 유튜브는 우리가 다뤄온 사이트들과는 다른 동적페이지입니다.
                      선택자를 올바르게 구성해도 파이썬 상에서 데이터가 구해지지 않을 수 있습니다.

                      동적페이지 처리법은 6주차 과정에서 배웁니다.

                      3. 다른 방법도 있지만, 두번 클릭해서 복사하는게 가장 쉬운 방법입니다.

                      좋아요 1
                      전휘목
                      10월 27일 10:11

                      네 답변 주셔서 감사합니다! 따라 해보겠습니다 ㅅㅅ 주말 잘 보내세요

                      좋아요 0
                        이승환

                        여기서 코드에는 문제없다고 하는데 데이터가 안 뜨는 이유는 무엇일까요...? ㅠㅠ

                        이헌영
                        10월 21일 17:05

                        승환님 안녕하세요 :) 
                        답변이 많이 늦었습니다 ㅠㅠ

                        해당하는 부분은 6주차에 다루게될 내용인데요, 웹페이지의 방식을 정적 페이지와 동적페이지로 구분하고 있는데요. 우리가 배운 방법은 정적페이지에서의 데이터 수집 방법이기 때문에 기존 방식으로는 수집이 불가능합니다.

                        6주차에 동적페이지와 정적페이지의 구분방법과 수집 방법을 공부하게 됩니다. 먼저 예습하고 싶으시다면 "selenium"이라는 패키지를 참고해보시면 좋을 것 같아요 :)

                        좋아요 1
                        너무 고민말고 물어보세요!
                        kakao 카카오톡 상담
                        kakao 적성 테스트
                        부담없이 채팅 상담하세요. 친절한 코알라가 대기중입니다:)