크롤링
스파르타 코딩 3주차 크롤링 과제
크롤링하기 위해서는 BeautifulSoup라이브러리와 request라이브러리가 필요하다
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')
data의 request.get안에 크롤링하고자 하는 url을 넣어주면 된다.
저 사이트에서 현재 음악순위와 노래제목 그리고 가수를 크롤링하여 print를 통해 출력할 것이다.
이렇게 있다면 필요한 것은 1 2 3 과 같은 순위와, 바라만 본다, next Level과 같은 제목, 그리고 MSG워너비, 에스파와 같은 정보가 필요하다
필요한 정보를 검사 copy -> copyselector를 눌러 해당 부분의 정보를 가지고 온다.
#body-content > div.newest-list > div > table > tbody > tr:nth-child(1) > td.number
#순위
#body-content > div.newest-list > div > table > tbody > tr:nth-child(1) > td.info > a.title.ellipsis
#노래 제목
#body-content > div.newest-list > div > table > tbody > tr:nth-child(1) > td.info > a.artist.ellipsis
#가수
#movies = soup.select('#old_content > table > tbody > tr')
보면 #body-content > div.newest-list > div > table > tbody > tr까지는 모두 동일하다
따라서 이 부분을 먼저 soup.select를 해준다.
musics = soup.select('#body-content > div.newest-list > div > table > tbody > tr')
진하게 표시된 부분을 통해서 각 부분의 정보를 추출할 수 있다.
여러개의 정보가 필요하니 반복문을 사용해준다.
for music in musics:
rank = music.select_one('td.number')
title=music.select_one('td.info > a.title.ellipsis')
artist=music.select_one('td.info > a.artist.ellipsis')
print(rank.text,title.text,artist.text)
이렇게 순위, 제목, 가수에 해당하는 부분을 각각 select_one을 통해 가져온다.
이 상태로 출력하면
1
20상승
바라만 본다 MSG워너비 (M.O.M)
2
유지
위와 같이 이상하게 출력이 된다.
따라서 순위 옆에 상승과 같은 문자를 잘라주고 strip()함수를 통해 필요없는 공백을 지워줘야 한다.
for music in musics:
rank = music.select_one('td.number')
title=music.select_one('td.info > a.title.ellipsis')
artist=music.select_one('td.info > a.artist.ellipsis')
print(rank.text[0:2].strip(),title.text.strip(),artist.text)
1 바라만 본다 MSG워너비 (M.O.M)
2 Next Level aespa
3 신호등 이무진
4 Weekend 태연 (TAEYEON)
5 치맛바람 (Chi Mat Ba Ram) 브레이브걸스 (Brave girls)
6 Butter 방탄소년단
7 나를 아는 사람 MSG워너비 (정상동기)
8 Permission to Dance 방탄소년단
9 비 오는 날 듣기 좋은 노래 (Feat. Colde) 에픽하이 (EPIK HIGH)
10 헤픈 우연 헤이즈 (Heize)
11 하루만 더 빅마마 (Big Mama)
12 비와 당신 이무진
13 Alcohol-Free TWICE (트와이스)
14 롤린 (Rollin') 브레이브걸스 (Brave girls)
15 Peaches (Feat. Daniel Caesar & Giveon) Justin Bieber
16 Dun Dun Dance 오마이걸 (OH MY GIRL)
17 Dynamite 방탄소년단
18 라일락 아이유 (IU)
19 안녕 (Hello) 조이 (JOY)
20 추적이는 여름 비가 되어 장범준
21 운전만해 (We Ride) 브레이브걸스 (Brave girls)
22 Celebrity 아이유 (IU)
23 러브 (Prod. by 로코베리) 로꼬 & 이성경
24 Bad Habits Ed Sheeran
25 상상더하기 MSG워너비
26 ASAP STAYC (스테이씨)
27 상상더하기 라붐 (LABOUM)
28 밤이 되니까 원슈타인
29 Timeless SG워너비
30 좋아좋아 조정석
31 Savage Love (Laxed - Siren Beat) (BTS Remix) Jawsh 685 & Jason Derulo & 방탄소년단
32 다정히 내 이름을 부르면 경서예지 & 전건호
33 내 손을 잡아 아이유 (IU)
34 사이렌 Remix (Feat. UNEDUCATED KID & Paul Blanco) 호미들
35 At My Worst Pink Sweat$
36 작은 것들을 위한 시 (Boy With Luv) (Feat. Halsey) 방탄소년단
37 OHAYO MY NIGHT 디핵 (D-Hack) & PATEKO
38 가을 우체국 앞에서 김대명
39 나는 너 좋아 장범준
40 멜로디 ASH ISLAND
41 Blueming 아이유 (IU)
42 밝게 빛나는 별이 되어 비춰줄게 송이한
43 에잇 (Prod. & Feat. SUGA of BTS) 아이유 (IU)
44 2002 Anne-Marie
45 LOVE DAY (2021) (바른연애 길잡이 X 양요섭, 정은지) 양요섭 & 정은지
46 아로하 조정석
47 흔들리는 꽃들 속에서 네 샴푸향이 느껴진거야 장범준
48 이제 나만 믿어요 임영웅
49 낙하 (With 아이유) AKMU (악뮤)
50 Off My Face Justin Bieber
이렇게 깔끔하게 필요한 부분만 크롤링할 수 있다.
아래 링크를 통해 웹개발에 대해 쉽게 배울 수 있다.
https://spartacodingclub.kr/?f_name=%EC%84%9C%ED%98%B8%EC%A7%84&f_uid=609fc9a919d4d89267a89838
스파르타코딩클럽
왕초보 8주 완성! 웹/앱/게임 빠르게 배우고 내것을 만드세요!
spartacodingclub.kr