Skip to content

Instantly share code, notes, and snippets.

@allieus
Last active October 12, 2021 06:05
Show Gist options
  • Save allieus/423625c7e846e1e7a81c to your computer and use it in GitHub Desktop.
Save allieus/423625c7e846e1e7a81c to your computer and use it in GitHub Desktop.
멜론, 플레이리스트 목록 파서
# coding: utf-8
import re
import urllib
from bs4 import BeautifulSoup
class MelonSong(object):
ARTIST_REGEXP = re.compile(r'.*goArtistDetail.*')
ALBUM_REGEXP = re.compile(r'.*goAlbumDetail.*')
SONG_REGEXP = re.compile(r'.*playSong.*')
NUMBER_PARAM_REGEXP = re.compile(r'[\'\",(\s](\d+)[\'\",)]')
def __init__(self, bs4_tag):
artist_tag = bs4_tag.find('a', {'href': self.ARTIST_REGEXP})
album_tag = bs4_tag.find('a', {'href': self.ALBUM_REGEXP})
song_tag = bs4_tag.find('a', {'href': self.SONG_REGEXP})
self.artist_id = self.get_number_param(artist_tag['href'])
self.artist_name = artist_tag.text
self.album_id = self.get_number_param(album_tag['href'])
self.album_name = album_tag.text
self.song_id = self.get_number_param(song_tag['href'], 1)
self.song_name = song_tag.text
def __unicode__(self):
return u'[{}] {}, [{}] {}, [{}] {}'.format(
self.artist_id, self.artist_name, self.album_id, self.album_name,
self.song_id, self.song_name)
def get_number_param(self, s, suppose_idx=0):
matched = re.findall(self.NUMBER_PARAM_REGEXP, s)
if matched:
return matched[suppose_idx]
return None
class MelonParser(object):
def __init__(self, html):
soup = BeautifulSoup(html)
for tr in soup.select('.d_song_list table tbody tr'):
print unicode(MelonSong(tr))
if __name__ == '__main__':
url = 'http://www.melon.com/mymusic/playlist/mymusicplaylistview_listPagingSong.htm?startIndex=51&pageSize=50&plylstSeq=403750375'
html = urllib.urlopen(url).read()
MelonParser(html)
[596671] 카페모카, [2289645] 다시 태어나도, [5452059] 다시 태어나도
[495401] 포스트맨, [2289472] 눈물이 나, [5450338] 눈물이 나
[713865] 다람, [2289550] 그래요, [5451362] 그래요 (Feat. 빌리어코스티)
[455161] 리디아, [2289587] 고양이는 있다 OST Part.11, [5451664] 난 안되는가요
[418700] 홍진영, [2289464] 인생노트 (LIFE NOTE), [5450271] 산다는 건 (Cheer Up)
[570311] 엔소닉, [2289482] 내겐 너무 사랑스러운 그녀 OST, [5450474] 그리워요
[168158] Still PM, [2289831] Doingood, [5454093] Doingood
[226789] 이동윤, [2289842] 시간이 흘러도, [5454274] 시간이 흘러도
[586991] 후니용이, [2289960] 고양이는 있다 OST Part.12, [5455028] 매일그대와 (Twist Ver.)
[776963] 한나 (리멤버러스), [2289565] 전설의 마녀 OST Part.1, [5451487] 러브스토리 (Original Ver.)
[747392] 클라라, [2289637] Fear, [5452028] 겁 (Feat. 야수)
[784386] N.D.(Night Delight), [2289863] 한번 더, [5454410] 한번 더
[718938] Chvrches, [2289898] Get Away, [5454652] Get Away
[776460] Pvris, [2289498] White Noise, [5450664] White Noise
[420527] 어반자카파, [2288961] [04], [5445197] 미운 나
[575692] Denzal Park, [2289693] Into The Light (Radio Edit), [5452680] Into The Light (Radio Edit)
[750333] Raleigh Ritchie, [2289899] Cuckoo, [5454653] Cuckoo
[509820] D. Heaven, [2289835] 그래도 너였어, [5454207] 그래도 너였어
[685125] 정연승, [2289870] 회자정리 거자필반, [5454429] 낯선 (Feat. 오지은)
[781093] Jasmine V, [2289887] That`s Me Right There, [5454528] That’s Me Right There (Feat. Kendrick Lamar)
[13846] 추승엽, [2289902] Keep It, [5454657] Keep It
[602056] 지코 (ZICO), [2289391] Tough Cookie, [5449581] Tough Cookie (Feat. Don Mills)
[190493] 언터쳐블, [2289703] 길이 보여, [5452795] 길이 보여 (Feat. 바스코, 기리보이)
[524801] DK (디셈버), [2289714] CS Numbers Vol.10, [5452927] 너의 말투로 살아
[789870] Borns, [2290035] 10,000 Emerald Pools, [5455884] 10,000 Emerald Pools
[785759] 임도혁, [2289903] 슈퍼스타K6 TOP11 Part 5, [5454668] 바보 같은 내게
[735961] Max Frost, [2289838] Paranoia, [5454239] Paranoia
[418666] Paloma Faith, [2289861] Ready For The Good Life, [5454401] Ready For The Good Life
[784668] The New Basement Tapes, [2289895] Lost On The River (Deluxe Edition), [5454603] When I Get My Hands On You
[786883] 김명기, [2289961] 나의 노래, [5455030] 나의 노래
[402544] Selena Gomez, [2290058] The Heart Wants What It Wants, [5456069] The Heart Wants What It Wants
[698411] Seven Lions, [2290095] Lucy, [5456441] Lucy
[42] 최백호, [2289905] 가족끼리 왜 이래 OST Part.2, [5454675] 길 위에서
[100594] 부활, [2289904] 불후의 명곡 - 전설을 노래하다 (전설의 포크 듀오 2편), [5454673] 하얀 손수건
[785601] 제이스타, [2289950] HELLO, [5454983] HELLO (Feat. 주대건 Of 소리얼)
[674297] 크로스진, [2289952] 어려도 남자야, [5454999] 어려도 남자야
[225182] 제미니, [2289954] 미녀의 탄생 OST Part 2, [5455001] 나만 몰랐어
[168856] 김우주, [2289968] More Softly, [5455114] Baby You
[102519] 슈가 도넛, [2290022] Double Minus, [5455803] 아름다운 인생
[593751] 고래야, [2290154] 넘어갔네, [5456991] 넘어갔네
[510447] 제이레빗, [2290109] 좋은 느낌, [5456623] 좋은 느낌
[771375] 정재원 (a.k.a 적재), [2289858] 한마디, [5454381] 다시
[789331] 러블리즈, [2289906] 어제처럼 굿나잇, [5454678] 어제처럼 굿나잇
[483581] 틴탑, [2289959] TEEN TOP 20`S LOVE TWO `EXITO`, [5455020] 우린 문제 없어 (I`m Sorry)
[686920] AOA, [2290102] 사뿐사뿐, [5456521] 사뿐사뿐
[100594] 부활, [2290116] TO BE ONE, [5456661] TO BE ONE (Feat. 안세권)
[569214] 울랄라세션, [2290132] 지금 우는 사람들, [5456806] 지금 우는 사람들
[314367] Dok2, [2290156] 치키차카초코초, [5456994] 치키차카초코초
[789978] HI SUHYUN, [2290103] 나는 달라, [5456526] 나는 달라 (Feat. BOBBY)
[588431] 팬텀, [2290140] 이제 보니까, [5456858] 이제 보니까
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment