Python多线程如何下载有声小说
发表于:2025-01-18 作者:千家信息网编辑
千家信息网最后更新 2025年01月18日,这篇文章跟大家分析一下"Python多线程如何下载有声小说"。内容详细易懂,对"Python多线程如何下载有声小说"感兴趣的朋友可以跟着小编的思路慢慢深入来阅读一下,希望阅读后能够对大家有所帮助。下面
千家信息网最后更新 2025年01月18日Python多线程如何下载有声小说
这篇文章跟大家分析一下"Python多线程如何下载有声小说"。内容详细易懂,对"Python多线程如何下载有声小说"感兴趣的朋友可以跟着小编的思路慢慢深入来阅读一下,希望阅读后能够对大家有所帮助。下面跟着小编一起深入学习"Python多线程如何下载有声小说"的知识吧。
我特地买了大屏幕的Note II 以便看pdf,另外耳朵也不能闲着,不过咱不是听英语而是听小说,我在读书的时候就喜欢听广播,特别是说书、相声等,所以我需要大量的有声小说,现在网上这些资源多的很,但是下载页记为麻烦,为了挣取更多的流量和广告点击,这些网站的下载链接都需要打开至少两个以上的网页才能找到真正的链接,甚是麻烦,为了节省整体下载时间,我写了这个小程序,方便自己和大家下载有声小说(当然,还有任何其他类型的资源)
先说明一下,我不是为了爬很多资料和数据,仅仅是为了娱乐和学习,所以这里不会漫无目的的取爬取一个网站的所有链接,而是给定一个小说,比方说我要下载小说《童年》,我会在我听评书网上找到该小说的主页然后用程序下载所有mp3音频,具体做法见下面代码,所有代码都在模块crawler5tps中:
1. 先设定一下start url 和保存文件的目录
#-*-coding:GBK-*- import urllib,urllib2 import re,threading,os baseurl = 'http://www.5tps.com' #base url down2path = 'E:/enovel/' #saving path save2path = '' #saving file name (full path)
2. 从start url 解析下载页面的url
def parseUrl(starturl): ''''' parse out download page from start url. eg. we can get 'http://www.5tps.com/down/8297_52_1_1.html' from 'http://www.5tps.com/html/8297.html' ''' global save2path rDownloadUrl = re.compile(".*?.{4}\s{1}(.*)\s{1}.*") #有声小说 闷骚1 播音:刘涛 全集 f = urllib2.urlopen(starturl) totalLine = f.readlines() ''''' create the name of saving file ''' title = totalLine[3].split(" ")[1] if os.path.exists(down2path+title) is not True: os.mkdir(down2path+title) save2path = down2path+title+"/" downUrlLine = [ line for line in totalLine if rDownloadUrl.match(line)] downLoadUrl = []; for dl in downUrlLine: while True: m = rDownloadUrl.match(dl) if not m: break downUrl = m.group(1) downLoadUrl.append(downUrl.strip()) dl = dl.replace(downUrl,'') return downLoadUrl
3. 从下载页面解析出真正的下载链接
def getDownlaodLink(starturl): ''''' find out the real download link from download page. eg. we can get the download link '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(''+gbk_ClickWord+'.*') #find the real download link for url in downloadUrl: realurl = baseurl+url print realurl for line in urllib2.urlopen(realurl).readlines(): m = rDownUrl.match(line) if m: downUrl.append(m.group(1)) return downUrl
4. 定义下载函数
def download(url,filename): ''''' download mp3 file ''' print url urllib.urlretrieve(url, filename)
5. 创建用于下载文件的线程类
class DownloadThread(threading.Thread): ''''' dowanload thread class ''' def __init__(self,func,savePath): threading.Thread.__init__(self) self.function = func self.savePath = savePath def run(self): download(self.function,self.savePath)
6. 开始下载
if __name__ == '__main__': starturl = 'http://www.5tps.com/html/8297.html' downUrl = getDownlaodLink(starturl) aliveThreadDict = {} # alive thread downloadingUrlDict = {} # downloading link i = 0; while i < len(downUrl): ''''' Note:我听评说网 只允许同时有三个线程下载同一部小说,但是有时受网络等影响,\ 为确保下载的是真实的mp3,这里将线程数设为2 ''' while len(downloadingUrlDict)< 2 : downloadingUrlDict[i]=i i += 1 for urlIndex in downloadingUrlDict.values(): #argsTuple = (downUrl[urlIndex],save2path+str(urlIndex+1)+'.mp3') if urlIndex not in aliveThreadDict.values(): t = DownloadThread(downUrl[urlIndex],save2path+str(urlIndex+1)+'.mp3') t.start() aliveThreadDict[t]=urlIndex for (th,urlIndex) in aliveThreadDict.items(): if th.isAlive() is not True: del aliveThreadDict[th] # delete the thread slot del downloadingUrlDict[urlIndex] # delete the url from url list needed to download print 'Completed Download Work'
这样就可以了,让他尽情的下吧,咱还得码其他的项目去,哎 >>>
关于Python多线程如何下载有声小说就分享到这里啦,希望上述内容能够让大家有所提升。如果想要学习更多知识,请大家多多留意小编的更新。谢谢大家关注一下网站!
小说
线程
链接
网站
学习
代码
内容
文件
更多
知识
程序
而是
资源
跟着
页面
麻烦
三个
两个
人物
做法
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
u8数据库怎么附加到系统库
曙光l300 g25服务器
普陀区营销软件开发供应商
网络安全检测装置校时异常
国内主流数据库及其特点
数据库的创建实训报告
医院保护网络安全建议
网络安全最牛的公司
专科的毕设进数据库吗
四川电脑软件开发公司
温县软件开发有限公司
服务器内存升级
北京软件开发的技术培训
数据库管理图书馆
网络安全执法中处罚主体
数据库如何改变会计科目
mysql数据库雇员表查询
九州讯捷网络技术有限公司
京东软件开发项目
华为h22x05服务器参数
汇丰软件开发年终奖
平顶山网络技术发展
流媒体服务器换分辨率
Linux进入数据库表命令
数据库字段用十六进制表示
学好软件开发可以创业吗
幼儿园网络安全简笔画
云服务器 很酷
长宁区品牌软件开发协议
数据库逆向数据量