25_3주차 끝 & 숙제 설명

yh271·2022년 4월 12일
0

웹개발 기초_3주차

목록 보기
9/9

지니뮤직의 1~50위 곡을 스크래핑 해보세요.
스크래핑할 페이지 주소: https://www.genie.co.kr/chart/top200?ditc=D&ymd=20200403&hh=23&rtm=N&pg=1

  1. 제시된 페이지를 스크래핑하면, 다음과 같이 앞뒤로 필요없는 텍스트나, 공백이 많이 있어, split(), strip() 함수를 이용하여 깔끔하게 만들어주는 작업이 필요하다.

  2. rank, title, name에 전부 .strip()을 적용하여 실행시켰으나, rank에 필요없는 공백과 텍스트가 남아 있다.

  3. 1과 2를 참고해 보면, rank는 숫자로 시작하며 중간에 공백과 텍스트가 섞여 있는 형태이므로, split()으로 문자를 분리하고, 첫 번째 것만 취하도록 하였다.

  4. split() 함수 다시보기
    split() 안에 아무것도 받지 않으면 공백을 기준으로 문자열을 나눈다.
    연속된 공백은 하나의 공백으로 취급된다.

  • test.py
txt = '0           2 4'

print(txt.split())

실행결과

C:\Users\rokimo\Desktop\sparta\pythonprac\venv\Scripts\python.exe C:/Users/rokimo/Desktop/sparta/pythonprac/test.py
['0', '2', '4']

Process finished with exit code 0
  1. 숙제 끝
  • genie.py
import requests
from bs4 import BeautifulSoup

from pymongo import MongoClient
client = MongoClient('localhost', 27017)
db = client.dbsparta

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=D&ymd=20200403&hh=23&rtm=N&pg=1',headers=headers)

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

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

for tr in trs:
    a_tag = tr.select_one('td.info > a.title.ellipsis')
    if a_tag is not None:
        rank = tr.select_one('td.number').text.split()[0]
        title = a_tag.text.strip()
        name = tr.select_one('td.info > a.artist.ellipsis').text.strip()
        print(rank,title,name)

실행결과

C:\Users\rokimo\Desktop\sparta\pythonprac\venv\Scripts\python.exe C:/Users/rokimo/Desktop/sparta/pythonprac/genie.py
1 아로하 조정석
2 시작 가호 (Gaho)
3 처음처럼 엠씨더맥스 (M.C the MAX)
4 이제 나만 믿어요 임영웅
5 아무노래 지코 (ZICO)
6 흔들리는 꽃들 속에서 네 샴푸향이 느껴진거야 장범준
7 뭔가 잘못됐어 권진아
8 WANNABE ITZY (있지)
9 돌덩이 하현우 (국카스텐)
10 어떻게 지내 (Prod. by VAN.C) 오반
11 METEOR 창모 (CHANGMO)
12 화려하지 않은 고백 규현 (KYUHYUN)
13 그때 그 아인 김필
14 Blueming 아이유 (IU)
15 문득 노을
16 마음을 드려요 아이유 (IU)
17 ON 방탄소년단
18 늦은 밤 너의 집 앞 골목길에서 노을
19 좋은 사람 있으면 소개시켜줘 조이 (JOY)
20 뜸 WINNER
21 Psycho Red Velvet (레드벨벳)
22 FIESTA IZ*ONE (아이즈원)
23 반만 진민호
24 2002 Anne-Marie
25 HIP 마마무(Mamamoo)
26 오늘도 빛나는 너에게 (To You My Light) (Feat.이라온) 마크툽 (Maktub)
27 어떻게 이별까지 사랑하겠어, 널 사랑하는 거지 AKMU (악뮤)
28 작은 것들을 위한 시 (Boy With Luv) (Feat. Halsey) 방탄소년단
29 Memories Maroon 5
30 Don't Start Now Dua Lipa
31 안녕 폴킴
32 다시 난, 여기 백예린 (Yerin Baek)
33 모든 날, 모든 순간 (Every day, Every Moment) 폴킴
34 Love poem 아이유 (IU)
35 바빠서 (Feat. 헤이즈) 개코
36 꽃 (flower) (Feat. 박재범 & 우원재 & 기리보이) 코드 쿤스트 (CODE KUNST)
37 Square (2017) 백예린 (Yerin Baek)
38 노래방에서 장범준
39 bad guy Billie Eilish
40 조금 취했어 (Prod. by 2soo) 임재현
41 잘 지내고 있는지 궁금해 V.O.S
42 시든 꽃에 물을 주듯 HYNN (박혜원)
43 새로고침 (Feat. 강민경 of 다비치) 박경
44 사랑이란 멜로는 없어 전상근
45 벚꽃 엔딩 버스커 버스커 (Busker Busker)
46 우리 왜 헤어져야 해 신예영
47 사랑의 인사 씨야 (SeeYa)
48 아무렇지 않게, 안녕 HYNN (박혜원)
49 Paris In The Rain Lauv
50 주저하는 연인들을 위해 잔나비

Process finished with exit code 0
  1. 해답에서는...
    if a_tag is not None: 부분에 해답으로 나와있는 코드.
    text[0:2]로 입력하여 앞 부분의 문자 2개만 받을 수 있다.
	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

0개의 댓글