成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Python多線程下載有聲小說

開發 后端
這里不會漫無目的的取爬取一個網站的所有鏈接,而是給定一個小說,比方說我要下載小說《童年》,我會在我聽評書網上找到該小說的主頁然后用程序下載所有mp3音頻,具體做法見下面代碼。

有經驗的老鳥都(未婚的)會在公司附近租房,免受舟車勞頓之苦的同時節約了大把時間;也有些人出于某種原因需要每天披星戴月地游走于公司與家之間,很不幸俺就是這其中一員。由于家和公司離得比較遠,我平時在公交車上的時間占據了工作時間段的1/4,再加上杭州一向有中國的拉斯維加斯之稱(堵城),每每堵起來,哥都能想象自己成為變形金剛。這段漫長時間我想作為每個程序猿來說是無法忍受的,可是既然短時間無法改變生存的現狀,咱就好好利用這段時間吧。所以,我特地買了大屏幕的Note II 以便看pdf,另外耳朵也不能閑著,不過咱不是聽英語而是聽小說,我在讀書的時候就喜歡聽廣播,特別是說書、相聲等,所以我需要大量的有聲小說,現在網上這些資源多的很,但是下載頁記為麻煩,為了掙取更多的流量和廣告點擊,這些網站的下載鏈接都需要打開至少兩個以上的網頁才能找到真正的鏈接,甚是麻煩,為了節省整體下載時間,我寫了這個小程序,方便自己和大家下載有聲小說(當然,還有任何其他類型的資源)

先說明一下,我不是為了爬很多資料和數據,僅僅是為了娛樂和學習,所以這里不會漫無目的的取爬取一個網站的所有鏈接,而是給定一個小說,比方說我要下載小說《童年》,我會在我聽評書網上找到該小說的主頁然后用程序下載所有mp3音頻,具體做法見下面代碼,所有代碼都在模塊crawler5tps中:

1. 先設定一下start url 和保存文件的目錄

  1. #-*-coding:GBK-*-  
  2.  import urllib,urllib2  
  3.  import re,threading,os  
  4.  baseurl = 'http://www.5tps.com' #base url   
  5.  down2path = 'E:/enovel/'        #saving path  
  6.  save2path = ''                  #saving file name (full path) 

2. 從start url 解析下載頁面的url

  1. def parseUrl(starturl):  
  2.      '''''  
  3.      parse out download page from start url.  
  4.      eg. we can get 'http://www.5tps.com/down/8297_52_1_1.html' from 'http://www.5tps.com/html/8297.html'  
  5.      ''' 
  6.      global save2path  
  7.      rDownloadUrl = re.compile(".*?<A href=\'(/down/\w+\.html)\'.*"#find the link of download page  
  8.      #rTitle = re.compile("<TITILE>.{4}\s{1}(.*)\s{1}.*</TITLE>")  
  9.      #<TITLE>有聲小說 悶騷1 播音:劉濤 全集</TITLE>  
  10.      f = urllib2.urlopen(starturl)  
  11.      totalLine =  f.readlines()  
  12.        
  13.     ''''' create the name of saving file ''' 
  14.      title = totalLine[3].split(" ")[1]  
  15.      if os.path.exists(down2path+title) is not True:  
  16.          os.mkdir(down2path+title)  
  17.          save2path = down2path+title+"/" 
  18.        
  19.      downUrlLine = [ line for line in totalLine if rDownloadUrl.match(line)]  
  20.      downLoadUrl = [];  
  21.      for dl in downUrlLine:  
  22.          while True:  
  23.              m = rDownloadUrl.match(dl)  
  24.              if not m:  
  25.                  break 
  26.              downUrl = m.group(1)  
  27.              downLoadUrl.append(downUrl.strip())  
  28.              dl = dl.replace(downUrl,'')  
  29.      return downLoadUrl 

3. 從下載頁面解析出真正的下載鏈接

  1. def getDownlaodLink(starturl):  
  2.      '''''  
  3.      find out the real download link from download page.  
  4.      eg. we can get the download link 'http://180j-d.ysts8.com:8000/人物紀實/童年/001.mp3?\  
  5.      1251746750178x1356330062x1251747362932-3492f04cf54428055a110a176297d95a' from \  
  6.      'http://www.5tps.com/down/8297_52_1_1.html'  
  7.      ''' 
  8.      downUrl = []  
  9.      gbk_ClickWord = '點此下載' 
  10.      downloadUrl = parseUrl(starturl)  
  11.      rDownUrl = re.compile('<a href=\"(.*)\"><font color=\"blue\">'+gbk_ClickWord+'.*</a>'#find the real download link  
  12.      for url in downloadUrl:  
  13.          realurl = baseurl+url  
  14.          print realurl  
  15.          for line in urllib2.urlopen(realurl).readlines():  
  16.              m = rDownUrl.match(line)  
  17.              if m:  
  18.                  downUrl.append(m.group(1))  
  19.      
  20.      return downUrl 

4. 定義下載函數

  1. def download(url,filename):  
  2.      ''''' download mp3 file ''' 
  3.      print url  
  4.      urllib.urlretrieve(url, filename) 

5. 創建用于下載文件的線程類

  1. class DownloadThread(threading.Thread):  
  2.      ''''' dowanload thread class ''' 
  3.      def __init__(self,func,savePath):  
  4.          threading.Thread.__init__(self)  
  5.          self.function = func  
  6.          self.savePath = savePath  
  7.        
  8.      def run(self):  
  9.          download(self.function,self.savePath) 

6. 開始下載

  1. if __name__ == '__main__':  
  2.      starturl = 'http://www.5tps.com/html/8297.html' 
  3.      downUrl = getDownlaodLink(starturl)  
  4.      aliveThreadDict = {}        # alive thread  
  5.      downloadingUrlDict = {}     # downloading link  
  6.    
  7.      i = 0;  
  8.      while i < len(downUrl):  
  9.          ''''' Note:我聽評說網 只允許同時有三個線程下載同一部小說,但是有時受網絡等影響,\  
  10.                          為確保下載的是真實的mp3,這里將線程數設為2 ''' 
  11.          while len(downloadingUrlDict)< 2 :  
  12.              downloadingUrlDict[i]=i  
  13.              i += 1 
  14.          for urlIndex in downloadingUrlDict.values():  
  15.              #argsTuple = (downUrl[urlIndex],save2path+str(urlIndex+1)+'.mp3')  
  16.              if urlIndex not in aliveThreadDict.values():  
  17.                  t = DownloadThread(downUrl[urlIndex],save2path+str(urlIndex+1)+'.mp3')  
  18.                  t.start()  
  19.                  aliveThreadDict[t]=urlIndex  
  20.          for (th,urlIndex) in aliveThreadDict.items():  
  21.              if th.isAlive() is not True:  
  22.                  del aliveThreadDict[th] # delete the thread slot  
  23.                  del downloadingUrlDict[urlIndex] # delete the url from url list needed to download   
  24.        
  25.      print 'Completed Download Work' 

這樣就可以了,讓他盡情的下吧,咱還得碼其他的項目去,哎 >>>

等下了班copy到Note中就可以一邊聽小說一邊看資料啦,***附上源碼。

原文鏈接:http://www.cnblogs.com/wuren/archive/2012/12/24/2831100.html

責任編輯:張偉 來源: 博客園
相關推薦

2015-02-03 15:06:23

android多線程下載

2011-05-31 13:29:40

Android 多線程

2014-12-31 15:42:21

Android多線程軟件下載

2010-02-01 17:25:09

Python多線程

2023-10-06 23:06:01

多線程Python

2010-02-01 17:18:23

Python多線程環境

2021-08-12 14:33:20

Python多線程編程

2009-03-12 10:52:43

Java線程多線程

2010-04-27 08:28:03

2010-03-18 16:02:09

python 多線程

2010-03-10 08:54:49

Python多線程

2010-03-10 18:32:45

Python多線程

2023-10-18 15:19:56

2024-10-16 09:34:50

2022-03-09 17:01:32

Python多線程多進程

2010-03-03 17:44:07

Python多線程

2013-07-16 10:12:14

iOS多線程多線程概念多線程入門

2023-06-05 07:56:10

線程分配處理器

2023-06-06 08:17:52

多線程編程Thread類

2010-01-21 11:27:30

linux多線程機制線程同步
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人做爰69片免费观看 | 亚洲精品自在在线观看 | 国产乱人伦 | 日韩欧美一区在线 | 久久久久成人精品免费播放动漫 | 亚洲成人精品 | 亚洲视频在线观看免费 | 亚洲国产欧美一区二区三区久久 | 久99久视频 | 在线免费小视频 | 国产精品视频入口 | 国产一级片免费在线观看 | 国产精品久久久久久久午夜片 | 国产精品美女久久久久久免费 | 日本不卡一区 | a在线视频观看 | 久久成人免费视频 | 国产精品精品视频一区二区三区 | 精品国产乱码一区二区三区a | 在线观看免费观看在线91 | 欧美日韩最新 | 亚洲国产一区视频 | 伊人久久免费视频 | 最新超碰 | 91www在线观看 | 久久精品91 | 久久久久久av| 日韩在线资源 | 中文字幕二区 | 欧美不卡一区 | 毛色毛片免费看 | 日韩欧美二区 | 国产亚洲成av人在线观看导航 | 国产成人影院 | 国产成人精品午夜视频免费 | 97国产精品 | 国产网站在线免费观看 | 亚洲电影免费 | 亚洲欧美日韩精品久久亚洲区 | 在线观看免费毛片 | 久久美国|