항해99

[항해99] TIL 사전과제 스터디 D-37

crab. 2022. 6. 4. 23:50

사전과제 스터디 시작

  • 사전과제 팀이 어제 정해지고 오늘 첫 모임을 가졌다.
  • 사실 항해99의 제일 큰 장점은 강의와 학습의 질 보다도 성장할 수 있는 환경 조성과 성취 과제를 던져주고 현업과 동일하게 문제해결능력을 기르는 것이라 생각한다.
  • 그렇기에 예상보다 더 빨리 스터디가 시작되어 너무 만족스럽다.
    • (사실 나는 뭔가 묶여있고 억압(억제력)받고 같이 경쟁하고 협력하는 환경이어야 집중이 더 잘된다…)
  • 오늘 모임 결과 우선 내일 9시 부터 실제 항해99 진행처럼 9~21시를 하기로 했는데 내도록 계속 여유롭다 하필 약속이 있는 내일과 내일모레가 스터디 첫 날이라니 참 얄궃다…
  • 그래도 내일 약속 가기전과 내일 모레 약속 이후에 최대한 들어가 있어야겠다.

노션 공유 페이지 만들기

  • 모임과 더불어 사전과제 스터디 양식을 만들기로 했다.
  • 근데 사실 오늘 모임에 개인적인 사정으로 두분이 참석못했는데 그분들의 기회를 뺏은 건 아닌가 괜히 걱정된다…
    • 계속 모이면서 변경사항이나 문제점이 있으면 새로 다 뜯어고치면 되겠지
  • 우선 스터디 목적, 웹개발종합반 커리큘럼, 출석체크, 알고리즘, 정보 등등의 목록을 만든 팀 노션 공유페이지를 만들어야겠다.
  • 이번 스터디를 정말 잘 해보고 싶다

웹개발 종합반 3주차 과제 공백이슈

  • 오늘은 뭔가 코드적으로 별로 한게 없는거 같은데 사실 맞다…
  • 그래서 더더욱 스터디의 필요성과 중요함이 강조되지 않나 싶다
  • 그래도 살짝 한게 있다면 3주차 과제의 해설되지 않은 문제를 같은 항해99멤버를 위해 설명하는 노션페이지를 만들었다는 점이다.
  • 오늘은 그거라도 올려야겠다

  • 저도 많이 부족하지만 한번 적어봅니다.
  • 혹시 틀린 부분이나 수정해야할 사항이 있으면 슬랙으로 DM보내주세요
  • 개발을 하시다보면 뜻하지 않게 원하지 않는 오류들을 많이 접하실거에요
  • 많이 부족한 제가 이런 말하는게 건방질 수도 있지만 그런 오류의 순간이 개발자로서 능력을 향상시키는 순간이라고 생각합니다. (물론 엄청 오래 붙잡고 있으면 안되지만요…)
  • 그 순간을 뺏고 싶지 않아서 단계별로 풀어볼 수 있는 힌트들을 적어봤어요 순서대로 해보시고 그래도 잘 안되시거나 궁금한점이 있으면 댓글이나 DM 보내주세요.

1단계

현재 문제가 되고 있는 부분을 한 번 관찰해보고 의심되는 부분을 찾아봅시다.

저 노래부분만(Peaches) 해당 문제가 생기는데 저 노래만 가지고 있는 특징이 무엇일까요

2단계

노래들 중 유일하게 19금 노래네요! 그럼 저 “19금”이 왜 문제를 일으킬까요?

3단계

우리는 bs4 크롤링을 하고 title의 경로는

#body-content > div.newest-list > div 
> table > tbody > tr >td.info > a.title.ellipsis

인데 저 19금 노래가 span으로 하나 더 있고

그로인해 19금이라는 텍스트가 따로 하나 더 들어가

선행과 후행 문자가 제거된 문자열의 복사본을 돌려주는 ********strip()이 정상적으로 작동하지 않았군요

(기존 다른 노래들의 html 형식)

(문제가 되는 Peaches의 html 형식)

 

(strip() 관련 설명 링크 https://wikidocs.net/33017)

4단계

그럼 앞으로 다른 날짜의 순위를 크롤링할때도 19금 노래가 있다면 같은 문제가 반복될 수 있다는 것을 알 수 있습니다.

해결방법은 저 19금 텍스트를 지워 strip()이 정상 작동하도록 하면 좋을 것 같습니다.

  1. 그럴려면 문자열내에서 특정 문자열을 제거하는 메서드가 뭔지 알아내어
  2. “19금”이라는 텍스트가 있는 title이라는 조건이 있을때는
  3. 그 조건내에서 새롭게 print하고 기존의 print 코드실행은 건너뛰고 다음 반복코드를 실행하면 좋겠네요

코드

  • 정답이 아니고 그냥 제가 생각한 코드입니다.
  • 코드의 의미적으로나 기능적으로 더 좋은 코드가 있을 수 있어요…
import requests
from bs4 import BeautifulSoup

headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
data = requests.get('<https://www.genie.co.kr/chart/top200?ditc=M&rtm=N&ymd=20210701>',headers=headers)

soup = BeautifulSoup(data.text, 'html.parser')

trs = soup.select('#body-content > div.newest-list > div > table > tbody > tr')

for tr in trs:
    title = tr.select_one('td.info > a.title.ellipsis').text.strip()
    rank = tr.select_one('td.number').text[0:2].strip()
    artist = tr.select_one('td.info > a.artist.ellipsis').text

    if ("19금" in title):
        print(rank, title.replace("19금", "").strip(), artist)
        continue

    print(rank, title, artist)