π€©λλ§μ κ°λ΅ IT μ μπ€©
λμ νμ΄μ§ VS μ μ νμ΄μ§
λμ νμ΄μ§?
λμ νμ΄μ§λ λ§ κ·Έλλ‘ μμ§μ΄λ νμ΄μ§λΌκ³ μκ°νλ©΄ μ½λ€. μλ₯Ό λ€μ΄μ μ νλΈ κ°μ μ¬μ΄νΈκ° λμ νμ΄μ§μ μνλ€.
μ μ νμ΄μ§?
μ μ νμ΄μ§λ λμ νμ΄μ§μλ λ€λ₯΄κ² λΉμ½μ νμλ©΄ λ©μΆ°μλ νμ΄μ§λΌκ³ μκ°νλ©΄ μ½λ€. μΌλ° μΌνλͺ°μ΄ μ μ νμ΄μ§λΌκ³ λ§ν μ μλ€.
μ΄ λμ 보면 μ°¨μ΄μ μ΄ λ³΄μΈλ€. λμ νμ΄μ§λ λ§μΉ λ«ΌλΉμ°μ€ λ μ²λΌ μ€ν¬λ‘€μ λ΄λ¦¬λ©΄ μλ‘μ΄ μνμ΄ λνλλ λ°λ©΄ μ μ νμ΄μ§λ μ€ν¬λ‘€μ λκΉμ§ λ΄λ¦¬λ©΄ νμ΄μ§ νλ¨(μ¬μ μ μ 보)μ΄ λνλλ€.
κ·Έλ λ€λ©΄ μ΄λ² μκ°μ 무μμ ν΄ λ³Ό κ²μΈκ°? λ°λ‘ λͺ¨ μμ μ¬μ΄νΈμ TOP100μ μΆμΆν΄λ³΄λ μ½λλ₯Ό μ£ΌνΌν° λ ΈνΈλΆμ μ΄μ©νμ¬ ν¬λ‘€λ§μ ν κ²μ΄λ€.
λ¨Όμ μ€λ ν¬λ‘€λ§ν λͺ¨ μμ μ¬μ΄νΈμ TOP100μ ν λ² λ΄λ³΄μ!
μ μ νμ΄μ§μ λκ°μ΄ 1-100μκΉμ§μ μμκ° νλ¨κΉμ§ ν λ²μ λμ€λ κ²μ λ³Ό μ μλ€.
μ΄μ ν λ² μ½λλ₯Ό μ§λ³΄κ³ ν¬λ‘€λ§μ ν΄λ³΄μ!
import requests as req
from bs4 import BeautifulSoup as bs
# 1. reqλ₯Ό νμ©ν΄μ λ©λ‘ μ°¨νΈ νμ΄μ§ μ 보 μμ²ν΄μ λ°μμ€κΈ°
req.get('https://www.melon.com/chart/index.htm')
# <Response [406]> = ν΅μ μ μ€ν¨
# 400λ²λ μ€λ₯λ μμ²μ€λ₯ !ν΄λΌμ΄μΈνΈ(λ΄)κ° μλͺ»
# 500λ²λ μ€λ₯λ μλ²μ€λ₯ ! μλ²κ°(λ©λ‘ ) μλͺ»
<Response [406]>
# ν¬λ‘¬μ 보μμΉ΄λλ₯Ό λ€κ³ μ€μ
# λΈλΌμ°μ μΈμ² μμ΄λ μμ
user_agent = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'}
# λ©λ‘ μ μμ΄κ³ ν¬λ‘¬μΈμ² μ±κ³΅!
res = req.get('https://www.melon.com/chart/index.htm',headers = user_agent)
soup=bs(res.text,'lxml')
1. λ Έλ μ λͺ© μμ§¶
# > μμ, ' ' μμ
title = soup.select('div.ellipsis.rank01 > span > a')
# data = soup.select('div a') μμ
title[0].text
'μ¬κ±΄μ μ§νμ '
for i in title:
print(i.text)
μ¬κ±΄μ μ§νμ
Nxde
ANTIFRAGILE
Hype boy
After LIKE
μμ₯ (Prod. ZICO) (Feat. νΈλ―Έλ€)
μ¬λμ λ λλ§κ°
London Boy
Polaroid
μ°λ¦¬λ€μ λΈλ£¨μ€
Rush Hour (Feat. j-hope of BTS)
Attention
λ€μ λ§λ μ μμκΉ
Monologue
무μ§κ°
μ΄μ λλ§ λ―Ώμ΄μ
LOVE DIVE
μλ²μ§
Shut Down
A bientot
μμ΄ μ°Έ κ³±λ κ·Έλ
μΈμμ°¬κ°
μ¬λν΄ μ§μ§
μ°μ νΈμ§
μ격μ§μ¬ (Feat. ZICO)
Pink Venom
보κΈμ리
λ± 10CMλ§
TOMBOY
ν΄μ (2022)
κ·Έλ κ·Έ μκ° κ·Έλλ‘ (κ·Έκ·Έκ·Έ)
κ·ΈλΌλ°μ΄μ
Cookie
μ°λ¦° κ·Έλ κ² μ¬λν΄μ
λ΄κ° μλλΌλ
μ¬λμΈκ° λ΄
FEARLESS
λμ λͺ¨λ μκ°
μ μ΄λΌκ³ νμ (Feat. 10CM)
That That (prod. & feat. SUGA of BTS)
ELEVEN
λμ Xμκ²
λ³΄κ³ μΆμμ΄
λ λλ³΄λΌ μ€λΉν΄ λκ±Έ κ·Έλ¬μ΄
μ·¨μ€κ³ λ°±
첫μ¬λ
That's Hilarious
λ΄ κΈ°μ¨μ λκ° λ²€ν리λ₯Ό λλ κ±°μΌ
λ€μ ν λ΄ μ΄λ¦μ λΆλ₯΄λ©΄
Dynamite
LOVE me
FOREVER 1
I Don't Think That I Like Her
μ£Όμ νλ μ°μΈλ€μ μν΄
μλ²½μ κ±Έλ €μ¨ λμ μ νλ
Left and Right (Feat. Jung Kook of BTS)
Butter
The Astronaut
κ³ λ°±μ°μ΅
SNEAKERS
Love story
λκΉ¨λΉλΆ (Illusion)
λ΄λ
LAW (Prod. Czaer)
λͺ¨λ λ , λͺ¨λ μκ° (Every day, Every Moment)
STAY
Yet To Come
λ΄μ¬λ¦κ°μκ²¨μΈ (Still Life)
κ·Έμ€μ κ·Έλλ₯Ό λ§λ
Permission to Dance
λ°€νλμ λ³μ(2020)
μ¬λνλ€κ³ λ§ν΄μ€
POP!
λμ λͺ©μ리λ‘
μ€ν°μ»€ μ¬μ§
Feel My Rhythm
strawberry moon
μ νΈλ±
MY BAG
INVU
μΈμμ λ·°ν°ν
λ΄ μμ μ‘μ
κ·Έλμ κ·Έλλ
Next Level
Off My Face
νμ λͺ©λ§ (Feat. Zion.T, μμνμΈ) (Prod. Slom)
λͺ»ν΄
ν΅νμ°κ²°μ
λλΌλ§
λ°λ³΄μκ² λ°λ³΄κ° (μΉν° 'μ°μ μ λ°κ²¬' X μ΄μν)
DICE
Girls
λ¦μ λ°€ ν€μ΄μ§κΈ΄ λ무 μμ¬μ
λλ₯Ό μκ°ν΄
GANADARA (Feat. μμ΄μ )
I Ain't Worried
GHOST TOWN
λͺ¨λ κ³μ μ λμλ€
μ£Όλ§λ±
Talk that Talk
len(title)
100
2. κ°μ μμ§¶
# singer = soup.select('div.ellipsis.rank02 > span > a')
# aνκ·Έλ νλμ λ
Έλμ μ¬λ¬κ°μκ° μμ λ μ€ν¨
# κ°μ κ°κ° aνκ·Έμ λ΄κ²¨μ Έ μκΈ° λλ¬Έ
# κ°μ μ μ²΄κ° ν¬ν¨λ νκ·Έλ₯Ό μμ§
# div νκ·Έλ‘ κ°μ Έμ€λ©΄ μμ κ°μ κ°μ΄ λ λ² λμ΄
#singer = soup.select('div.ellipsis.rank02')
# span νκ·Έλ₯Ό νμ©ν΄μ κ°μ μμ§
singer = soup.select('span.checkEllipsis')
len(singer)
100
for i in singer:
print(i.text)
μ€ν (YOUNHA)
(μ¬μ)μμ΄λ€
LE SSERAFIM (λ₯΄μΈλΌν)
NewJeans
IVE (μμ΄λΈ)
μ§μ½ (ZICO)
μμμ
μμμ
μμμ
μμμ
Crush
NewJeans
μμμ
ν
μ΄
μμμ
μμμ
IVE (μμ΄λΈ)
μμμ
BLACKPINK
μμμ
μμμ
μμμ
μμμ
μμμ
BE'O (λΉμ€)
BLACKPINK
μμμ
10CM, BIG Naughty (μλν)
(μ¬μ)μμ΄λ€
#μλ
WSGμλλΉ (κ°μΌG)
10CM
NewJeans
κ°λ―Όκ²½ (λ€λΉμΉ), μλλΉ μ΅μ ν
μ£ΌνΈ
λ©λ‘λ§μ€
LE SSERAFIM (λ₯΄μΈλΌν)
μ±μκ²½
BIG Naughty (μλν)
μΈμ΄ (PSY)
IVE (μμ΄λΈ)
κ²½μ
WSGμλλΉ (4FIRE)
μνλ³
κΉλ―Όμ (λ©λ‘λ§μ€)
λ°±μ
Charlie Puth
κΉμΉλ―Ό
κ²½μμμ§, μ 건νΈ
λ°©νμλ
λ¨
BE'O (λΉμ€)
μλ
μλ (GIRLS' GENERATION)
Charlie Puth
μλλΉ
νλκ·Ό
Charlie Puth, μ κ΅, λ°©νμλ
λ¨
λ°©νμλ
λ¨
μ§
κ²½μ
ITZY (μμ§)
λ³ΌλΉ¨κ°μ¬μΆκΈ°
aespa
λ°©νμλ
λ¨
μ€λ―Έλ, λΉλΉ (BIBI)
ν΄ν΄
The Kid LAROI, Justin Bieber
λ°©νμλ
λ¨
BIGBANG (λΉ
λ±
)
κΉνΈμ€
λ°©νμλ
λ¨
κ²½μ
νν
λμ° (TWICE)
κΉνΈμ€
21νλ²
Red Velvet (λ λ벨벳)
μμ΄μ
μ΄λ¬΄μ§
(μ¬μ)μμ΄λ€
νμ° (TAEYEON)
κΉνΈμ€
μμ΄μ
μ΄μν
aespa
Justin Bieber
sokodomo
κΉλμ
보λΌλ―Έμ , MJ (μ¨λμ¬μ΄λ)
μμ΄μ
μ΄μν
NMIXX
aespa
μΌμ΄μ (Kassy)
μ£Όμν¬ (Joosiq)
λ°μ¬λ²
OneRepublic
Benson Boone
길ꡬλ΄κ΅¬
κΉνΈμ€
TWICE (νΈμμ΄μ€)
# 0726
# μμ§ν λ°μ΄ν°λ₯Ό μ¬μ©μκ° μ¬μ©ν μ μκ² λ³ν > μμ
νμΌλ‘ λ§λ€κΈ°
# 리μ€νΈλ₯Ό λ§λ€μ΄μ titleκ³Ό singerμ κ°μ μ μ₯
title_list =[]
singer_list = []
for i in range(len(singer)):
singer_list.append(singer[i].text)
title_list.append(title[i].text)
title_list
['μ¬κ±΄μ μ§νμ ',
'Nxde',
'ANTIFRAGILE',
'Hype boy',
'After LIKE',
'μμ₯ (Prod. ZICO) (Feat. νΈλ―Έλ€)',
'μ¬λμ λ λλ§κ°',
'London Boy',
'Polaroid',
'μ°λ¦¬λ€μ λΈλ£¨μ€',
'Rush Hour (Feat. j-hope of BTS)',
'Attention',
'λ€μ λ§λ μ μμκΉ',
'Monologue',
'무μ§κ°',
'μ΄μ λλ§ λ―Ώμ΄μ',
'LOVE DIVE',
'μλ²μ§',
'Shut Down',
'A bientot',
'μμ΄ μ°Έ κ³±λ κ·Έλ',
'μΈμμ°¬κ°',
'μ¬λν΄ μ§μ§',
'μ°μ νΈμ§',
'μ격μ§μ¬ (Feat. ZICO)',
'Pink Venom',
'보κΈμ리',
'λ± 10CMλ§',
'TOMBOY',
'ν΄μ (2022)',
'κ·Έλ κ·Έ μκ° κ·Έλλ‘ (κ·Έκ·Έκ·Έ)',
'κ·ΈλΌλ°μ΄μ
',
'Cookie',
'μ°λ¦° κ·Έλ κ² μ¬λν΄μ',
'λ΄κ° μλλΌλ',
'μ¬λμΈκ° λ΄',
'FEARLESS',
'λμ λͺ¨λ μκ°',
'μ μ΄λΌκ³ νμ (Feat. 10CM)',
'That That (prod. & feat. SUGA of BTS)',
'ELEVEN',
'λμ Xμκ²',
'λ³΄κ³ μΆμμ΄',
'λ λλ³΄λΌ μ€λΉν΄ λκ±Έ κ·Έλ¬μ΄',
'μ·¨μ€κ³ λ°±',
'첫μ¬λ',
"That's Hilarious",
'λ΄ κΈ°μ¨μ λκ° λ²€ν리λ₯Ό λλ κ±°μΌ',
'λ€μ ν λ΄ μ΄λ¦μ λΆλ₯΄λ©΄',
'Dynamite',
'LOVE me',
'FOREVER 1',
"I Don't Think That I Like Her",
'μ£Όμ νλ μ°μΈλ€μ μν΄',
'μλ²½μ κ±Έλ €μ¨ λμ μ νλ',
'Left and Right (Feat. Jung Kook of BTS)',
'Butter',
'The Astronaut',
'κ³ λ°±μ°μ΅',
'SNEAKERS',
'Love story',
'λκΉ¨λΉλΆ (Illusion)',
'λ΄λ ',
'LAW (Prod. Czaer)',
'λͺ¨λ λ , λͺ¨λ μκ° (Every day, Every Moment)',
'STAY',
'Yet To Come',
'λ΄μ¬λ¦κ°μκ²¨μΈ (Still Life)',
'κ·Έμ€μ κ·Έλλ₯Ό λ§λ',
'Permission to Dance',
'λ°€νλμ λ³μ(2020)',
'μ¬λνλ€κ³ λ§ν΄μ€',
'POP!',
'λμ λͺ©μ리λ‘',
'μ€ν°μ»€ μ¬μ§',
'Feel My Rhythm',
'strawberry moon',
'μ νΈλ±',
'MY BAG',
'INVU',
'μΈμμ λ·°ν°ν',
'λ΄ μμ μ‘μ',
'κ·Έλμ κ·Έλλ',
'Next Level',
'Off My Face',
'νμ λͺ©λ§ (Feat. Zion.T, μμνμΈ) (Prod. Slom)',
'λͺ»ν΄',
'ν΅νμ°κ²°μ',
'λλΌλ§',
"λ°λ³΄μκ² λ°λ³΄κ° (μΉν° 'μ°μ μ λ°κ²¬' X μ΄μν)",
'DICE',
'Girls',
'λ¦μ λ°€ ν€μ΄μ§κΈ΄ λ무 μμ¬μ',
'λλ₯Ό μκ°ν΄',
'GANADARA (Feat. μμ΄μ )',
"I Ain't Worried",
'GHOST TOWN',
'λͺ¨λ κ³μ μ λμλ€',
'μ£Όλ§λ±',
'Talk that Talk']
# 리μ€νΈλ‘ λ§λ λ°μ΄ν°λ₯Ό ν(Data Frame)νμμΌλ‘ μ μ
import pandas as pd
# 리μ€νΈλ‘ λ°μ΄ν°νλ μμ λ§λ€λ©΄ ν λ°©ν₯μΌλ‘ λ°μ΄ν° νλ μμ΄ λ§λ€μ΄μ§
df1 = pd.DataFrame([singer_list,title_list])
# μ μΉ ν¨μ μ¬μ©νκΈ°
df1 = df1.T
# μ»¬λΌ μ΄λ¦ λ³κ²½
df1.columns = ['κ°μ','λ
Έλ']
df1
κ°μ | λ Έλ | |
---|---|---|
0 | μ€ν (YOUNHA) | μ¬κ±΄μ μ§νμ |
1 | (μ¬μ)μμ΄λ€ | Nxde |
2 | LE SSERAFIM (λ₯΄μΈλΌν) | ANTIFRAGILE |
3 | NewJeans | Hype boy |
4 | IVE (μμ΄λΈ) | After LIKE |
... | ... | ... |
95 | OneRepublic | I Ain't Worried |
96 | Benson Boone | GHOST TOWN |
97 | 길ꡬλ΄κ΅¬ | λͺ¨λ κ³μ μ λμλ€ |
98 | κΉνΈμ€ | μ£Όλ§λ± |
99 | TWICE (νΈμμ΄μ€) | Talk that Talk |
100 rows × 2 columns
# λμ
λλ¦¬λ‘ λ°μ΄ν°νλ μ λ§λ€κΈ°
dic = {'κ°μ':singer_list, 'λ
Έλ':title_list}
pd.DataFrame(dic)
κ°μ | λ Έλ | |
---|---|---|
0 | μ€ν (YOUNHA) | μ¬κ±΄μ μ§νμ |
1 | (μ¬μ)μμ΄λ€ | Nxde |
2 | LE SSERAFIM (λ₯΄μΈλΌν) | ANTIFRAGILE |
3 | NewJeans | Hype boy |
4 | IVE (μμ΄λΈ) | After LIKE |
... | ... | ... |
95 | OneRepublic | I Ain't Worried |
96 | Benson Boone | GHOST TOWN |
97 | 길ꡬλ΄κ΅¬ | λͺ¨λ κ³μ μ λμλ€ |
98 | κΉνΈμ€ | μ£Όλ§λ± |
99 | TWICE (νΈμμ΄μ€) | Talk that Talk |
100 rows × 2 columns
# μΈλ±μ€ λ²νΈ λ³κ²½
df1.index = range(1,101)
df1
κ°μ | λ Έλ | |
---|---|---|
1 | μ€ν (YOUNHA) | μ¬κ±΄μ μ§νμ |
2 | (μ¬μ)μμ΄λ€ | Nxde |
3 | LE SSERAFIM (λ₯΄μΈλΌν) | ANTIFRAGILE |
4 | NewJeans | Hype boy |
5 | IVE (μμ΄λΈ) | After LIKE |
... | ... | ... |
96 | OneRepublic | I Ain't Worried |
97 | Benson Boone | GHOST TOWN |
98 | 길ꡬλ΄κ΅¬ | λͺ¨λ κ³μ μ λμλ€ |
99 | κΉνΈμ€ | μ£Όλ§λ± |
100 | TWICE (νΈμμ΄μ€) | Talk that Talk |
100 rows × 2 columns
# μΈλ±μ€μ μ΄λ¦ λ¬κΈ°
df1.index.name = 'μμ'
df1
κ°μ | λ Έλ | |
---|---|---|
μμ | ||
1 | μ€ν (YOUNHA) | μ¬κ±΄μ μ§νμ |
2 | (μ¬μ)μμ΄λ€ | Nxde |
3 | LE SSERAFIM (λ₯΄μΈλΌν) | ANTIFRAGILE |
4 | NewJeans | Hype boy |
5 | IVE (μμ΄λΈ) | After LIKE |
... | ... | ... |
96 | OneRepublic | I Ain't Worried |
97 | Benson Boone | GHOST TOWN |
98 | 길ꡬλ΄κ΅¬ | λͺ¨λ κ³μ μ λμλ€ |
99 | κΉνΈμ€ | μ£Όλ§λ± |
100 | TWICE (νΈμμ΄μ€) | Talk that Talk |
100 rows × 2 columns
# csvνμΌλ‘ λ§λ€κΈ°
df1.to_csv('melon_tip100.csv', encoding = 'euc-kr')
'ν¬λ‘€λ§' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
Python Selenium μ λ λμ ν¬λ‘€λ§ (0) | 2022.11.24 |
---|---|
ν¬λ‘€λ§μΌλ‘ μ΄λ―Έμ§ μ μ₯νκΈ° (0) | 2022.11.21 |
μ μ νμ΄μ§ ν¬λ‘€λ§ (0) | 2022.11.20 |
λμ νμ΄μ§ ν¬λ‘€λ§ (0) | 2022.11.20 |
μ£ΌνΌν° λ ΈνΈλΆμ ν°μ€ν 리μ μ¬λ¦¬λ λ°©λ² (0) | 2022.11.19 |