Skip to content

Commit

Permalink
Update downloadFromLuoow.com.py
Browse files Browse the repository at this point in the history
  • Loading branch information
daivlin committed Feb 7, 2020
1 parent 7fef1a2 commit ee3e1fc
Showing 1 changed file with 79 additions and 23 deletions.
102 changes: 79 additions & 23 deletions 5 下载落网音乐/downloadFromLuoow.com.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,34 +11,65 @@
from pyquery import PyQuery as pq
import requests as rq

luooUrl = "http://www.luoow.com/r/{}/"

def parse_javascript(js):
'''解析js文本中的mp3数据,以字典形式返回:{'name':mp3Name,'url':}'''
patternName = re.compile(r'"name":"(.*?)"') #name
patternMp3 = re.compile(r'"src":"(.*?.mp3)"') #mp3Url
namesList = patternName.findall(js)
mp3List = patternMp3.findall(js)

musicDictList = [{"name":name[:2],"url":url} for name,url in zip(namesList,mp3List)]
musicDictList = [{"name":name,"url":url} for name,url in zip(namesList,mp3List)]

return musicDictList

class LuooMusic(object):
'''下载落网'''
def __init__(self,issueNum):
self.url = "http://www.luoow.com/{}/".format(issueNum)
self.html = pq(url = self.url)
def __init__(self,url):
self.url = url
try:
self.html = pq(url = self.url)
except:
self.html = ""

def get_title(self):
'''获取每一期的标题'''
return self.html("title").text()

if self.html:
return self.html("title").text()
else:
return ""

def get_coverUrl(self):
'''获取每一期封面'''
return self.html(".container .cover_img img").attr("src")
if self.html:
return self.html(".container .cover_img img").attr("src")
else:
return ""

def get_musicDictList(self):
'''获取每一期音乐列表'''
return parse_javascript(self.html("script")[1].text)
if self.html:
return parse_javascript(self.html("script")[1].text)
else:
return ""

class DownloadCoverThread(threading.Thread):
''' 下载线程'''
def __init__(self,name,url):
super(DownloadThread,self).__init__()
self.name = name
self.url = url

def run(self):
''' 下载封面 '''
ABSPATH = os.path.dirname(os.path.realpath(__file__))
COVERPATH = os.path.join(ABSPATH,"%s-cover.jpg"%self.name)
if not os.path.exists(COVERPATH):
with open(COVERPATH,"wb") as f:
f.write(rq.get(self.url).content)
print("%s was downloaded"%self.name)

class DownloadThread(threading.Thread):
''' 下载线程'''
Expand All @@ -62,21 +93,46 @@ def run(self):
f.write(rq.get(self.url).content)
#urllib.request.urlretrieve(self.url, MUSICPATH) #乱码bug还未处理
print("%s was downloaded"%self.name)


def download_cover_thread(name,url):
''' 下载封面 '''
ABSPATH = os.path.dirname(os.path.realpath(__file__))
COVERPATH = os.path.join(ABSPATH,"%s-cover.jpg"%name)
if not os.path.exists(COVERPATH):
with open(COVERPATH,"wb") as f:
f.write(rq.get(url).content)
print("%s was downloaded"%name)

def download_music_thread(dirname,name,url):
''' 下载音乐 '''
ABSPATH = os.path.dirname(os.path.realpath(__file__))
DOWNDIR = os.path.join(os.path.join(ABSPATH,"Luoo"),"%s"%dirname)
MUSICPATH = os.path.join(DOWNDIR,"%s.mp3"%name)
try:
os.mkdir(DOWNDIR)
except:
pass
#if not os.path.exists(MUSICPATH):
with open(MUSICPATH,"wb") as f:
f.write(rq.get(url).content)
print("%s was downloaded"%name)

if __name__ == "__main__":
luooUrl = "http://www.luoow.com/mi/{}/" #单曲
for i in range(1,50):
r = LuooMusic(luooUrl.format(i))
dirname = "mi {} - {}".format(i,r.get_title())
musicList = r.get_musicDictList()
trs = []
for music in musicList:
trs.append(threading.Thread(target=download_music_thread,args=(dirname,music["name"],music["url"])))
print("add %s thread"%music["name"])

for tr in trs:
tr.start()

for i in range(993,1000):
r = LuooMusic(i)
name = r.get_title()
tds = []
index = 1
for j in r.get_musicDictList():
tds.append(DownloadThread(name,j["name"],j["url"]))
index += 1
print("start download %s"%name)
for td in tds:
td.start()
for tj in tds:
tj.join()
print("%s download complate"%name)
print("=========================")
for tr in trs:
tr.join()

print("All have downloaded")
print("All have downloaded")

0 comments on commit ee3e1fc

Please sign in to comment.