request = requests.get(site) # requests.get() 함수를 사용하여 해당 URL에 GET 요청을 보냅니다.
print(request) # 응답코드를 보여줌 # 요청에 성공하면, 웹 페이지의 내용을 가져옵니다. 이 내용은 response 객체에 저장됩니다.
# print(request.text) # HTML/ CSS를 잔뜩 들고옴
soup = BeautifulSoup(request.text)
# 추출된 텍스트를 BeautifulSoup의 BeautifulSoup 함수에 전달하여 파싱합니다. 이를 위해 두 번째 인자로 'html.parser'를 사용합니다.
# 파싱된 HTML 문서를 soup 객체에 저장합니다. 이제 soup 객체를 사용하여 원하는 정보를 검색하고 추출할 수 있습니다.
divs = soup.find('div', {'class':'thrv-columns'}) # 단일 테그를 가지고 옴 # 키 벨류로 가지고 오고, div로 이루어지면서 뒤의 이름으로 이루어진 div
print(divs)
# 안에 있는 엥커태그를 다 갖고 오고싶을때
links = divs.findAll('a')
print(links)
# BeautifulSoup의 findAll() 또는 find_all() 메서드를 사용하여 HTML 문서 내에서 <a> 태그를 찾는 부분입니다.
# 앵커태그를 다 가지고 와서 컴마를 기준으로 리스트에 저장
# 텍스트만 빼서 보고 싶다. for문 이용
for link in links:
print(link.text)
subject = []
for link in links:
subject.append(link.text)
# 서브젝트 안에 리스트로 들어감
len(subject)
print('총', len(subject), '개의 주제를 찾았습니다')
for i in range(len(subject)):
print('{0:2d}, {1:s}'.format(i+1, subject[i]))
# subject라는 리스트에 저장된 주제들을 출력하는 기능을 수행
# 주제의 번호와 내용을 출력합니다. '{0:2d}, {1:s}'는 형식 지정 문자열로, 첫 번째 인자 i+1은 2자리의 정수로, 두 번째 인자 subject[i]는 문자열로 포맷됩니다.
# i+1은 1부터 시작하는 주제 번호를 표시하고, subject[i]은 해당 주제의 내용을 표시합니다.
# 따라서 주어진 코드는 subject 리스트에 저장된 주제들을 번호와 함께 출력하는 역할을 수행합니다.
총 75 개의 주제를 찾았습니다
1, Family
2, Restaurant
3, Books
4, Travel
5, Website
6, Accident
7, Childhood memory
8, Favorite rooms
9, Presents
10, Historical place
11, Newspaper/ Magazine
12, A memorable event
13, A favorite subject
14, A museum
15, A favorite movie
16, A foreign country
17, Parties
18, A teacher
19, A friend
20, A hotel
21, A letter
22, Hobbies
23, Music
24, Shopping
25, Holiday
26, Animals
27, A practical skill
28, Sport
29, A School
30, Festival
31, Food
32, Household appliance
33, A music band
34, Weather
35, Neighbor
36, Natural scenery
37, Outdoor activities
38, Law
39, Pollution
40, Traffic jam
41, TV program
42, Architect/ Building
43, Electronic Media
44, Job/ Career
45, Competition/ contest
46, A garden
47, Hometown
48, Clothing
49, Advertisement
50, A project
51, A wedding
52, A Coffee shop
53, Culture
54, Transport
55, Politician
56, Communication
57, Business
58, Computer
59, Exercise
60, Goal/ ambition
61, Art
62, Fashion
63, Jewelry
64, Cosmetic
65, Indoor Game
66, Phone conversation
67, Learning A Second language
68, A Creative Person
69, A celebrity
70, A Health Problem
71, Technological advancements
72, A Landmark
73, Handcraft Items
74, Plastic Surgery
75, Success
# for i in range(len(titles)):
# title = titles[i].text.strip()
# artist = artists[i].text.strip()
# print('{0:3d}위 {1} - {2}'.format(i+1, artist, title))
# 이 코드는 37위 크리스토퍼에서 엔터키가 자동으로 먹어서 이상하게 구분이 됨. 따라서, .split('\n')[0] 을 붙여야 함
for i in range(len(titles)):
title = titles[i].text.strip()
artist = artists[i].text.strip().split('\n')[0]
print('{0:3d}위 {1} - {2}'.format(i+1, artist, title))
# 깔끔하게 정렬
# 이 코드는 타이틀에 의해서만 반복문을 돌림
.split('\n')은 문자열을 줄 바꿈(\n)을 기준으로 분할하여 리스트로 반환하는
메서드입니다. 따라서 artists[i].text.strip().split('\n')은 artists[i]
요소의 텍스트를 가져와서 줄 바꿈을 기준으로 분할한 결과를 리스트로 반환합니다.
이후 [0]을 사용하여 리스트의 첫 번째 요소를 선택합니다. 인덱스 0은
리스트에서 첫 번째 항목을 나타내므로, .split('\n')[0]은 리스트에서 첫 번째 줄의 문자열을 가져옵니다.
주어진 코드에서 artist = artists[i].text.strip().split('\n')[0]은 artists
리스트의 i번째 요소에서 텍스트를 가져온 후 양쪽 공백을 제거하고, 그 결과를
줄 바꿈을 기준으로 분할한 리스트에서 첫 번째 줄의 문자열을 artist 변수에
할당하는 역할을 수행합니다.
이렇게 함으로써 가수 이름 문자열에 줄 바꿈 문자열이 포함되어 있는 경우 첫
번째 줄의 가수 이름만을 추출할 수 있습니다.
# zip함수를 이용하여, artists와 titles로 for문 돌리기
# 강사님 코드(enumerate 사용)
for i, (t, a) in enumerate(zip(titles, artists)): # enumerate를 이용해서 index도 같이 추출할 수 있다.
title = t.text.strip()
artist = a.text.strip().split('\n')[0]
if (i+1) % 10 == 1:
print('\n')
print('{0:3d}위 곡 {1} - {2}'.format(i+1, artist, title))
1위 곡 (여자)아이들 - 퀸카 (Queencard)
2위 곡 aespa - Spicy
3위 곡 IVE (아이브) - I AM
4위 곡 LE SSERAFIM (르세라핌) - UNFORGIVEN (feat. Nile Rodgers)
5위 곡 IVE (아이브) - Kitsch
6위 곡 FIFTY FIFTY - Cupid
7위 곡 세븐틴(SEVENTEEN) - 손오공
8위 곡 LE SSERAFIM (르세라핌) - 이브, 프시케 그리고 푸른 수염의 아내
9위 곡 NewJeans - Hype Boy
10위 곡 NewJeans - Ditto
11위 곡 지수(JISOO) - 꽃
12위 곡 aespa - Thirsty
13위 곡 이채연 - KNOCK
14위 곡 NewJeans - Attention
15위 곡 NewJeans - OMG
16위 곡 Charlie Puth(찰리 푸스) - Dangerously
17위 곡 STAYC(스테이씨) - Teddy Bear
18위 곡 IVE (아이브) - After LIKE
19위 곡 Charlie Puth(찰리 푸스) - I Don’t Think That I Like Her
20위 곡 IVE (아이브) - LOVE DIVE
21위 곡 H1-KEY (하이키) - 건물 사이에 피어난 장미 (Rose Blossom)
22위 곡 (여자)아이들 - Allergy
23위 곡 LE SSERAFIM (르세라핌) - ANTIFRAGILE
24위 곡 윤하(Younha/ユンナ) - 사건의 지평선
25위 곡 DK(디셈버) - 심(心)
26위 곡 던 (DAWN) - 빛이 나는 너에게
27위 곡 박재정 - 헤어지자 말해요
28위 곡 LE SSERAFIM (르세라핌) - FEARLESS
29위 곡 멜로망스(MeloMance) - 사랑인가 봐
30위 곡 허각 - 물론
31위 곡 Christopher(크리스토퍼) - When I Get Old
32위 곡 DAY6 (데이식스) - 한 페이지가 될 수 있게
33위 곡 부석순(SEVENTEEN) - 파이팅 해야지 (Feat. 이영지)
34위 곡 Charlie Puth(찰리 푸스) - That’s Not How This Works (feat. Dan + Shay)
35위 곡 aespa - Salty & Sweet
36위 곡 NMIXX - Love Me Like This
37위 곡 BLACKPINK - Shut Down
38위 곡 (여자)아이들 - TOMBOY
39위 곡 IVE (아이브) - ELEVEN
40위 곡 윤하(Younha/ユンナ) - 오르트구름
41위 곡 지올팍(Zior Park) - CHRISTIAN
42위 곡 임재현 - Heaven(2023)
43위 곡 BLACKPINK - Pink Venom
44위 곡 FIFTY FIFTY - Cupid (Twin Ver.)
45위 곡 (여자)아이들 - Nxde
46위 곡 NCT DREAM - Candy
47위 곡 볼빨간사춘기 - FRIEND THE END
48위 곡 The Kid LAROI - STAY
49위 곡 박재범 - Candy (Feat. Zion.T)
50위 곡 비투비 - 나의 바람 (Wind And Wish)
51위 곡 성시경 - 너의 모든 순간
52위 곡 멜로망스(MeloMance) - 찬란한 하루
53위 곡 10CM - 그라데이션
54위 곡 이무진 - 잠깐 시간 될까
55위 곡 STAYC(스테이씨) - Poppy (Korean Ver.)
56위 곡 경서예지 - 다정히 내 이름을 부르면
57위 곡 BIG Naughty (서동현) - 정이라고 하자 (Feat. 10CM)
58위 곡 임영웅 - 사랑은 늘 도망가
59위 곡 Charlie Puth(찰리 푸스) - That's Hilarious
60위 곡 aespa - 도깨비불 (Illusion)
61위 곡 경서 - 나의 X에게
62위 곡 폴킴(Paul Kim) - 모든 날, 모든 순간 (Every day, Every Moment)
63위 곡 김민석 (멜로망스) - 취중고백
64위 곡 #안녕 - 해요 (2022)
65위 곡 잔나비 - 주저하는 연인들을 위해
66위 곡 태연 (TAEYEON) - INVU
67위 곡 폴킴(Paul Kim) - 한강에서 (Feat. BIG Naughty)
68위 곡 NewJeans - Cookie
69위 곡 Justin Bieber(저스틴 비버) - Off My Face
70위 곡 테이(Tei) - Monologue
71위 곡 태양 - VIBE (feat. Jimin of BTS)
72위 곡 Sam Smith(샘 스미스) - Unholy
73위 곡 NCT 도재정 - Perfume
74위 곡 WSG워너비 (가야G) - 그때 그 순간 그대로 (그그그)
75위 곡 Red Velvet (레드벨벳) - Feel My Rhythm
76위 곡 10CM - 부동의 첫사랑
77위 곡 아이유(IU) - 드라마
78위 곡 방탄소년단 - Dynamite
79위 곡 지아(Zia) - 사랑..그게 뭔데
80위 곡 주호 - 내가 아니라도
81위 곡 우디(Woody) - Say I Love You
82위 곡 BIGBANG (빅뱅) - 봄여름가을겨울 (Still Life)
83위 곡 BE'O (비오) - LOVE me
84위 곡 아이유(IU) - strawberry moon
85위 곡 지코 (ZICO) - 새삥 (Prod. ZICO) (Feat. 호미들)
86위 곡 aespa - I'm Unhappy
87위 곡 Crush - Rush Hour (Feat. j-hope of BTS)
88위 곡 10CM - 딱 10CM만
89위 곡 카라(Kara) - WHEN I MOVE
90위 곡 이영지 - NOT SORRY (Feat. pH-1) (Prod. by Slom)
91위 곡 우디(Woody) - Nostalgia
92위 곡 태양 - 나의 마음에 (Seed)
93위 곡 볼빨간사춘기 - Love story
94위 곡 CIX (씨아이엑스) - Save me, Kill me
95위 곡 Charlie Puth(찰리 푸스) - Left and Right (Feat. Jung Kook of BTS)
96위 곡 aespa - Welcome To MY World (Feat. nævis)
97위 곡 CIX (씨아이엑스) - Color
98위 곡 주주 시크릿 - 밤이 무서워요 (Lonely Night)
99위 곡 BE'O (비오) - 자격지심 (Feat. ZICO)
100위 곡 CIX (씨아이엑스) - Curtain Call
```
zip() 함수는 동일한 길이의 여러 개의 리스트를 묶어서 함께 반복할 수 있도록
해줍니다. 위 코드에서는 titles와 artists 리스트를 zip() 함수로 묶어서
반복하면서 각 노래의 제목과 가수를 동시에 가져옵니다.
루프의 각 반복에서 title과 artist 변수는 titles와 artists 리스트의 해당