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

## 스터디 결과 보고

 - 스터디 시간: 07월 18일 19시 ~ 21시

 - 스터디 주제: 해커톤 주제 회의 및 팀원 결정

 - 발표자: 없음

 - 불참 인원: 없음

자세히 보기
이태경
7월 11일 20:18 · 유니브1기 - 고릴라

## 스터디 결과 보고 

 - 스터디 시간: 07월 11일 17시 ~ 19시 

 - 스터디 주제: 정규클래스 리뷰 및 과제 1,2 해결 및 해커톤 주제 회의

 - 발표자: 김유리님 

 - 불참 인원: 없음

자세히 보기
박채린

스터디 결과 보고 

- 스터디 시간: 07월 05일 16시 ~ 17시 반 

- 스터디 주제:  복습 및 자율 과제 해결  

- 발표자: 이정모님 

- 불참 인원: 신동윤, 윤혜정

자세히 보기
이태경
7월 5일 15:26 · 유니브1기 - 고릴라

## 스터디 결과 보고 

 - 스터디 시간: 07월 04일 17시 ~ 19시 반

 - 스터디 주제: 정규클래스 리뷰 및 과제 1,2 해결 및 해커톤 주제 회의

 - 발표자: 최재호님 

 - 불참 인원: 없음

자세히 보기
이태경
6월 28일 16:09 · 유니브1기 - 고릴라

## 스터디 결과 보고

 - 스터디 시간: 06월 27일 17시 ~ 19시 반

 - 스터디 주제: 정규클래스 리뷰 및 과제 1,2 해결

 - 발표자: 문구영님

 - 불참 인원: 없음(신원기님 5분 지각)

자세히 보기

3. 다음 영화 데이터 수집하기


#영화별 상세페이지 선택자
    #제목: strong.tit_movie
    #평점: div.subject_movie > a > em.emph_grade
    #장르: dd.txt_main:nth-of-type(1)
    #감독: dd.type_ellipsis:nth-of-type(1)
    #배우: dd.type_ellipsis:nth-of-type(2)

import requests
from bs4 import BeautifulSoup
from urllib.request import urlretrieve

raw = requests.get("http://ticket2.movie.daum.net/Movie/MovieRankList.aspx")
html = BeautifulSoup(raw.text, "html.parser")

# 컨테이너 div.desc_boxthumb
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)
    html_each = BeautifulSoup(raw_each.text, 'html.parser')

    #상세페이지 컨테이너 div.detail_summarize
    movies2 = html.select("div.detail_summarize")

    for m2 in movies2:
        title2 = m2.select_one("div.subject_movie strong.tit_movie")
        stars = m2.select_one("div.subject_movie > a > em.emph_grade")
        genre = m2.select_one("dd.txt_main:nth-of-type(1)")
        director = m2.select_one("dd.type_ellipsis")
        actors = m2.select_one("dd.type_ellipsis")

        print("=" * 50)
        print("제목:", title2.text)

        print("-" * 50)
        print("평점:")
        for s in stars:
            print(s.text)

        print("-" * 50)
        print("장르:")
        for g in genre:
            print(g.text)

        print("감독:")
        for d in director:
            print(d.text)

        print("-" * 50)
        print("배우:")
        for a in actors:
            print(a.text)


자세히 보기
이헌영
6월 19일 16:04

1. 상세페이지가 아니라 기존 페이지를 수집하고 있습니다.

raw_each = requests.get(url)
html_each = BeautifulSoup(raw_each.text, 'html.parser')

#상세페이지 컨테이너 div.detail_summarize
movies2 = html.select("div.detail_summarize")

html을 html_each로 바꿔주셔야합니다.

raw_each = requests.get(url)
html_each = BeautifulSoup(raw_each.text, 'html.parser')

#상세페이지 컨테이너 div.detail_summarize
movies2 = html_each.select("div.detail_summarize")


좋아요 0
    이헌영
    6월 19일 16:10

    2. select_one은 요소 하나를 수집/ select는 요소를 모두 수집하는 함수입니다(리스트)

    지금 주연님의 코드를 보면 제목, 평점, 장르, 감독, 배우를 모두 select_one을 사용하여 요소 하나를 수집하고 있습니다. 이 때는 for문을 사용할 수 없으므로 아래와 같이 수집하려는 데이터의 모양에 따라 다른 함수를 사용해줍니다.

    **nth-of-type을 사용할 때는 tag이름만을 사용할 수 있습니다.
    각각 5번째, 6번째 dd태그가 감독이름과 장르를 포함하고 있습니다 :)


        for m2 in movies2:
            title2 = m2.select_one("div.subject_movie strong.tit_movie")
            stars = m2.select_one("div.subject_movie > a > em.emph_grade")
            genre = m2.select_one("dd.txt_main")
            director = m2.select("dd:nth-of-type(5) a")
            actors = m2.select("dd:nth-of-type(6) a")
    
            print("=" * 50)
            print("제목:", title2.text)
    
            print("-" * 50)
            print("평점:")
            print(stars.text)
    
            print("-" * 50)
            print("장르:")
            print(genre.text)
    
            print("감독:")
            for d in director:
                print(d.text)
    
            print("-" * 50)
            print("배우:")
            for a in actors:
                print(a.text)


    좋아요 0
      이헌영
      6월 19일 16:10

      전체코드 보기

      #영화별 상세페이지 선택자
          #제목: strong.tit_movie
          #평점: div.subject_movie > a > em.emph_grade
          #장르: dd.txt_main:nth-of-type(1)
          #감독: dd.type_ellipsis:nth-of-type(1)
          #배우: dd.type_ellipsis:nth-of-type(2)
      
      import requests
      from bs4 import BeautifulSoup
      from urllib.request import urlretrieve
      
      raw = requests.get("http://ticket2.movie.daum.net/Movie/MovieRankList.aspx")
      html = BeautifulSoup(raw.text, "html.parser")
      
      # 컨테이너 div.desc_boxthumb
      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)
          html_each = BeautifulSoup(raw_each.text, 'html.parser')
      
          #상세페이지 컨테이너 div.detail_summarize
          movies2 = html_each.select("div.detail_summarize")
      
          for m2 in movies2:
              title2 = m2.select_one("div.subject_movie strong.tit_movie")
              stars = m2.select_one("div.subject_movie > a > em.emph_grade")
              genre = m2.select_one("dd.txt_main")
              director = m2.select("dd:nth-of-type(5) a")
              actors = m2.select("dd:nth-of-type(6) a")
      
              print("=" * 50)
              print("제목:", title2.text)
      
              print("-" * 50)
              print("평점:")
              print(stars.text)
      
              print("-" * 50)
              print("장르:")
              print(genre.text)
      
              print("감독:")
              for d in director:
                  print(d.text)
      
              print("-" * 50)
              print("배우:")
              for a in actors:
                  print(a.text)


      좋아요 0
        댓글 2개 더보기

        2. iMDb 영화포스터 수집하기

        import requests
        from bs4 import BeautifulSoup
        from urllib.request import urlretrieve
        
        raw = requests.get("https://www.imdb.com/movies-in-theaters/?ref_=nv_mv_inth",
                           headers={"User-Agent":"Mozilla/5.0"})
        html = BeautifulSoup(raw.text, "html.parser")
        
        # 0. 컨테이너 table.nm-title-overview-widget-layout
        movies = html.select("table.nm-title-overview-widget-layout")
        
        for m in movies:
            print("="*50)
            # 1. 영화제목 td h4
            title = m.select_one("td h4 a")
            print("제목:", title.text)
        
            url = title.attrs["href"]
            print(url)
        
            print("-"*50)
            full_url = "https://www.imdb.com/" + url
            raw_each = requests.get(full_url, headers={"User-Agent":"Mozilla/5.0"})
            html_each = BeautifulSoup(raw_each.text, 'html.parser')
        
            # 포스터: div.mv_info_area div.poster img
            poster = html_each.select_one("div.poster img")
            poster_src = poster.attrs["src"]
        
            urlretrieve(poster_src, "poster/"+title.text[:5]+".jpg")


        자세히 보기

        1번과제 IMDb페이지에서 현재 상영중인 영화의 제목/평점(metaccore)/감독/배우 찾기

        #컨테이너: table.nm-title-overview-widget-layout
        #제목: td h4
        #평점: div.rating_txt span
        #감독: div.txt-block a
        #배우: div.txt-block a
        #장르: p.cert-runtime-genre span
        
        
        #2. 코드를 통해서 데이터 수집하기
        import requests
        from bs4 import BeautifulSoup
        
        raw = requests.get("https://www.imdb.com/movies-in-theaters/?ref_=nv_mv_inth",
                           headers={'User-Agnet':'Mozilla/5.0'})
        html = BeautifulSoup(raw.text, 'html.parser')
        
        Imovie = html.select("table.nm-title-overview-widget-layout")
        
        for m in Imovie:
            title = m.select_one("td h4")
            score = m.select_one("div.rating_txt > span")
            info = m.select("div.txt-block")
            directors = info[0].select("a")
            actors = info[1].select("a")
            genre = m.select("p.cert-runtime-genre span")
        
            genre_all = m.select_one("p.cert-runtime-genre").text
        
            # 3. (심화) 조건문을 활용하여 Action장르의 영화만 출력하기
            if "Action" not in genre_all:
                continue
        
            print("="*50)
            print("제목:", title.text)
        
            if score is None:
                score = "None"
            else:
                print("=" * 50)
                print("평점:", score.text)
                score = score.text
        
            print("-"*50)
            print("감독:")
            for d in directors:
                print(d.text)
        
            print("-"*50)
            print("배우:")
            for a in actors:
                print(a.text)
        
            print("-"*50)
            print("장르:")
            for g in genre:
                print(g.text.replace("|","").replace(" ",""))
        


        자세히 보기
        이헌영
        6월 19일 16:00

        <장르> 부분을 확인해보면  "첫번째" 데이터에 항상 관람 가능 연령이 저장되는 것을 확인할 수 있습니다.

        이  부분을 해결하는 가장 쉬운 방법은 리스트의 첫번째 값을 빼주는 것인데요. 기존에 배운 슬라이싱을 활용해서 리스트의 첫번째 값을 빼줄  수 있습니다.

        genre = genre[1:]

        하지만 연령정보를 가지고있지 않은 경우도 있기때문에  remove함수를 활용해서  특정 값을 제거하는 방법도 있습니다.(심화)

        remove함수는 list에서 특정 데이터를 제거해주는 함수입니다.

        사용법)

        LIST.remove("값")


        수집코드에서는 span.certRating(관람 가능 연령)이 있는 경우 해당하는 요소를 삭제합니다.

        genre = m.select("p.cert-runtime-genre span")
        cert = m.select_one("p.cert-runtime-genre span.certRating")
        if cert in genre:
            genre.remove(cert)


        좋아요 0
          강주연
          6월 19일 15:35

            # Q. 장르 스크랩시 "연령" 삭제방법

          좋아요 0
            강주연
            6월 19일 16:49

            감사합니다 선생님 :)

            좋아요 0
              ## 다음뉴스 검색결과 저장하기 
              #1. 다음뉴스에서 선택자 찾아내기
              #컨테이너: div.wrap_cont, 제목: a.f_link_b, 기사요약: p.f_eb.desc
              
              #2. URL에서 요청값 규칙 찾아내기 : ?요청값=요청값
              #   w=news, q=대탈출, p=1 / w = where, q = query, p = start
              
              #3. 찾아낸 선택자를 활용하여 데이터 수집하기
              
              import requests
              from bs4 import BeautifulSoup
              import openpyxl
              
              try:
                  wb = openpyxl.load_Workbook("daumnews.xlsx")
                  sheet = wb.active #시트지정
                  print("파일 불러오기 성공")
              
              except:
                  wb = openpyxl.Workbook()
                  sheet = wb.active #시트지정
                  sheet.append(["제목", "기사요약"])
                  print("신규파일생성")
              
              MAX = 10
              for n in range(1, MAX):
                  raw = requests.get("https://search.daum.net/search?w=news&q=대탈출&p="+str(n))
                  html = BeautifulSoup(raw.text, "html.parser")
              
                  dnews = html.select("div.wrap_cont")
              
                  for dnew in dnews:
                      title = dnew.select_one("a.f_link_b").text
                      excerp = dnew.select_one("p.f_eb.desc").text
                      print("-"*100)
                      print(title)
                      print(excerp)
              
                      sheet.append([title, excerp])
              
              
              wb.save("daumnews.xlsx")


              자세히 보기
              ##기술블로그 검색결과 저장하기 
              #1. 기술블로그에서 선택자 찾아내기
              #컨테이너: li.post-item.post, 제목: h3.post-title, 요약: p.post-excerpt, 기술태그: p.post-tags > a
              
              #2. 찾아낸 선택자를 활용하여 데이터 수집하기
              
              import requests
              from bs4 import BeautifulSoup
              import openpyxl
              
              try:
                  wb = openpyxl.load_Workbook("kakaoblog.xlsx")
                  sheet = wb.active #시트지정
                  print("파일 불러오기 성공")
              
              except:
                  wb = openpyxl.Workbook()
                  sheet = wb.active #시트지정
                  sheet.append(["제목", "내용", "키워드"])
                  print("신규파일생성")
              
              MAX = 12
              for n in range(1, MAX):
                  raw = requests.get("http://tech.kakao.com/page/"+str(n), headers={"User-Agent":"Mozilla/5.0"})
                  html = BeautifulSoup(raw.text, "html.parser")
              
                  kblogs = html.select("li.post-item.post")
              
                  for kblog in kblogs:
                      title = kblog.select_one("h3.post-title").text.strip()
                      excerp = kblog.select_one("p.post-excerpt").text.strip()
                      ptags = kblog.select_one("p.post-tags").text.strip()
              
                      print("-"*100)
                      print(title)
                      print(excerp)
                      print(ptags)
              
                      sheet.append([title, excerp, ptags]) #키워드가 들러붙어서 나옴 구분 필요, 질문한 사항
              
              wb.save("kakaoblog.xlsx")
              


              자세히 보기
              이태경
              6월 6일 17:39 · 유니브1기 - 고릴라

              ## 스터디 결과 보고 - 스터디 시간: 06월 06일 14시 ~ 16시 - 스터디 주제: 정규클래스 리뷰 및 과제 1,2 해결 

              - 발표자: 이태경 

              - 불참 인원:  없음(최재호님 5분 지각)

              자세히 보기
              #1. 기술블로그에서 선택자 찾아내기
              #컨테이너: li.post-item.post, 제목: h3.post-title, 요약: p.post-excerpt, 기술태그: p.post-tags > a
              
              #2. 찾아낸 선택자를 활용하여 데이터 수집하기
              
              import requests
              from bs4 import BeautifulSoup
              
              MAX = 12
              for n in range(1, MAX):
                  raw = requests.get("http://tech.kakao.com/page/"+str(n), headers={"User-Agent":"Mozilla/5.0"})
                  html = BeautifulSoup(raw.text, "html.parser")
              
                  kblogs = html.select("li.post-item.post")
              
                  for kblog in kblogs:
                      title = kblog.select_one("h3.post-title").text
                      excerp = kblog.select_one("p.post-excerpt").text
                      ptags = kblog.select_one("p.post-tags").text
              
                      print("-"*100)
                      print(title)
                      print(excerp)
                      print(ptags)
              
              #1. 다음뉴스에서 선택자 찾아내기
              #컨테이너: div.wrap_cont, 제목: a.f_link_b, 기사요약: p.f_eb.desc
              
              #2. URL에서 요청값 규칙 찾아내기 : ?요청값=요청값
              #   w=news, q=대탈출, p=1 / w = where, q = query, p = start
              
              #3. 찾아낸 선택자를 활용하여 데이터 수집하기
              
              import requests
              from bs4 import BeautifulSoup
              
              MAX = 10
              for n in range(1, MAX):
                  raw = requests.get("https://search.daum.net/search?w=news&q=대탈출&p="+str(n))
                  html = BeautifulSoup(raw.text, "html.parser")
              
                  dnews = html.select("div.wrap_cont")
              
                  for dnew in dnews:
                      title = dnew.select_one("a.f_link_b").text
                      excerp = dnew.select_one("p.f_eb.desc").text
                      print("-"*100)
                      print(title)
                      print(excerp)
              


              자세히 보기
              이헌영
              6월 4일 20:23

              주연님 킹갓! 너무 잘해주셨습니다!!

              좋아요 0
                김수빈
                6월 4일 10:50 · 유니브1기 - 유희코

                스터디 결과 보고 

                 - 스터디 시간: 5월 27일 7시반-9시반시 

                 - 스터디 주제: 딱 데이터사이언스를위한 파이썬

                - 발표자: 김민선님

                 - 불참 인원: 신채원님

                자세히 보기
                이헌영
                6월 4일 19:16

                왜케 떨어져 앉았어요 ㅋㅋㅋㅋ

                좋아요 0
                  김수빈
                  6월 1일 22:44 · 유니브1기 - 유희코

                  스터디 결과 보고
                  - 스터디 시간: 5월 27일 7시반-9시반시
                  - 스터디 주제:  데이터사이언스 마인드
                  - 발표자: 김수빈님
                  - 불참 인원: 우현수님

                  자세히 보기

                  1. data = ["조회수 : 1,500", "조회수: 1,002", "조회수: 300", "조회수: 251", "조회수: 13,432", "조회수: 998"] sum = 0 # 출력을 할때 , for d data : 이렇게 출력을 하면 된다 . for d in data: ch = d.replace(",", "").replace("조회수", "").replace(":", "") sum += int(ch) print(ch) if int(ch) == 998: print("합은 :", sum) 2. print("일반계산기 프로그램입니다.!") first = input("계산할 첫번째 값을 입력해주세요.") second = input("계산할 두번째 값을 입력해주세요.") print("두개의 값 : ", first, "와 ", second,"\n") first = int(first) second = int(second) print("더하기 값 (a + b) :", first + second) print("빼기 값 (a - b ) : ", first - second) print("곱하기 값 (a * b) : ", first * second) print("정수 나누기 값 (a // b )", first // second) print("실수 나누기 값 (a / b) ", first / second) print("나머지 값 (a % b ) :", first % second) 3. num = input("생년월일을 6자리로 입력해주세요 . ") print("-----------------------------------------------") print("당신의 생일은 ", num[0:2], "년", num[2:4], "월", num[4:], "일") 4. result = "" for num in range(1, 10): result += "*" print(result) print("") two_result = "" for num2 in range(1, 10): two_result += "*" if num2 % 2 == 1: print(two_result) print("") three_result = "" for num3 in range(1, 10): three_result = "*" print(three_result * (10 - num3)) 5. players = ["황의조", "황희찬", "구자철", "이재성", "기성용"] print("현재 경기 중인 선수 ") string2 = "" for num in range(len(players)): print(num, players[num]) if num == 4: print("==========================") out_num = input("OUT 시킬 선수 번호 : ") in_num = input("IN 할 선수 이름 : ") out_num = int(out_num) del players[out_num] players.append(in_num) print("교체결과 : ") for num2 in range(len(players)): print(players[num2])          

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