Python多线程如何下载有声小说(python,多线程,编程语言)

时间:2024-05-07 10:51:36 作者 : 石家庄SEO 分类 : 编程语言
  • TAG :

我特地买了大屏幕的Note II 以便看pdf,另外耳朵也不能闲着,不过咱不是听英语而是听小说,我在读书的时候就喜欢听广播,特别是说书、相声等,所以我需要大量的有声小说,现在网上这些资源多的很,但是下载页记为麻烦,为了挣取更多的流量和广告点击,这些网站的下载链接都需要打开至少两个以上的网页才能找到真正的链接,甚是麻烦,为了节省整体下载时间,我写了这个小程序,方便自己和大家下载有声小说(当然,还有任何其他类型的资源)

先说明一下,我不是为了爬很多资料和数据,仅仅是为了娱乐和学习,所以这里不会漫无目的的取爬取一个网站的所有链接,而是给定一个小说,比方说我要下载小说《童年》,我会在我听评书网上找到该小说的主页然后用程序下载所有mp3音频,具体做法见下面代码,所有代码都在模块crawler5tps中:

1. 先设定一下start url 和保存文件的目录

#-*-coding:GBK-*-importurllib,urllib2importre,threading,osbaseurl='http://www.5tps.com'#baseurldown2path='E:/enovel/'#savingpathsave2path=''#savingfilename(fullpath)

2. 从start url 解析下载页面的url

defparseUrl(starturl):'''''parseoutdownloadpagefromstarturl.eg.wecanget'http://www.5tps.com/down/8297_52_1_1.html'from'http://www.5tps.com/html/8297.html''''globalsave2pathrDownloadUrl=re.compile(".*?<Ahref=\'(/down/\w+\.html)\'.*")#findthelinkofdownloadpage#rTitle=re.compile("<TITILE>.{4}\s{1}(.*)\s{1}.*</TITLE>")#<TITLE>有声小说闷骚1播音:刘涛全集</TITLE>f=urllib2.urlopen(starturl)totalLine=f.readlines()'''''createthenameofsavingfile'''title=totalLine[3].split("")[1]ifos.path.exists(down2path+title)isnotTrue:os.mkdir(down2path+title)save2path=down2path+title+"/"downUrlLine=[lineforlineintotalLineifrDownloadUrl.match(line)]downLoadUrl=[];fordlindownUrlLine:whileTrue:m=rDownloadUrl.match(dl)ifnotm:breakdownUrl=m.group(1)downLoadUrl.append(downUrl.strip())dl=dl.replace(downUrl,'')returndownLoadUrl

3. 从下载页面解析出真正的下载链接

defgetDownlaodLink(starturl):'''''findouttherealdownloadlinkfromdownloadpage.eg.wecangetthedownloadlink'http://180j-d.ysts8.com:8000/人物纪实/童年/001.mp3?\1251746750178x1356330062x1251747362932-3492f04cf54428055a110a176297d95a'from\'http://www.5tps.com/down/8297_52_1_1.html''''downUrl=[]gbk_ClickWord='点此下载'downloadUrl=parseUrl(starturl)rDownUrl=re.compile('<ahref=\"(.*)\"><fontcolor=\"blue\">'+gbk_ClickWord+'.*</a>')#findtherealdownloadlinkforurlindownloadUrl:realurl=baseurl+urlprintrealurlforlineinurllib2.urlopen(realurl).readlines():m=rDownUrl.match(line)ifm:downUrl.append(m.group(1))returndownUrl

4. 定义下载函数

defdownload(url,filename):'''''downloadmp3file'''printurlurllib.urlretrieve(url,filename)

5. 创建用于下载文件的线程类

classDownloadThread(threading.Thread):'''''dowanloadthreadclass'''def__init__(self,func,savePath):threading.Thread.__init__(self)self.function=funcself.savePath=savePathdefrun(self):download(self.function,self.savePath)

6. 开始下载

if__name__=='__main__':starturl='http://www.5tps.com/html/8297.html'downUrl=getDownlaodLink(starturl)aliveThreadDict={}#alivethreaddownloadingUrlDict={}#downloadinglinki=0;whilei<len(downUrl):'''''Note:我听评说网只允许同时有三个线程下载同一部小说,但是有时受网络等影响,\为确保下载的是真实的mp3,这里将线程数设为2'''whilelen(downloadingUrlDict)<2:downloadingUrlDict[i]=ii+=1forurlIndexindownloadingUrlDict.values():#argsTuple=(downUrl[urlIndex],save2path+str(urlIndex+1)+'.mp3')ifurlIndexnotinaliveThreadDict.values():t=DownloadThread(downUrl[urlIndex],save2path+str(urlIndex+1)+'.mp3')t.start()aliveThreadDict[t]=urlIndexfor(th,urlIndex)inaliveThreadDict.items():ifth.isAlive()isnotTrue:delaliveThreadDict[th]#deletethethreadslotdeldownloadingUrlDict[urlIndex]#deletetheurlfromurllistneededtodownloadprint'CompletedDownloadWork'

这样就可以了,让他尽情的下吧,咱还得码其他的项目去,哎>>>

Python多线程如何下载有声小说

 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:Python多线程如何下载有声小说的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:如何进行java面向对象编程原理的分析下一篇:

10 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18