最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python多線程結(jié)合隊列下載百度音樂的方法

 更新時間:2015年07月27日 17:47:08   作者:御寒  
這篇文章主要介紹了Python多線程結(jié)合隊列下載百度音樂的方法,實例分析了Python多線程及文件下載的相關(guān)實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下

本文實例講述了Python多線程結(jié)合隊列下載百度音樂的方法。分享給大家供大家參考。具體如下:

一直想做個下載音樂的腳本,后來決定就拿百度音樂開刀,經(jīng)過多次分析,終于制作了一個下載百度音樂的腳本,目前只默認下載第一頁,童鞋們可以自由拓展。
適用Windows和Linux平臺、依賴BeautifulSoup這個庫,主要對HTML進行解析

#!/usr/bin/python
# -*- coding: utf-8 -*-
'''
 百度中批量下載某歌手的歌(目前只下載第一頁,可以自行拓展)
 @author:admin
 @qq: 1243385033
'''
import threading, urllib2, os,re,sys
from bs4 import BeautifulSoup
from Queue import Queue
'''目標歌手'''
SINGER = u'亞東'
'''保存路徑'''
SAVE_FOLDER = 'F:/music/'
# 查詢url
search_url = "http://music.baidu.com/search/song?key=%s&s=1"
# 百度音樂播放盒url
song_url = "http://box.zhangmen.baidu.com/x?op=12&count=1&mtype=1&title="
class Downloader(threading.Thread):
  def __init__(self, task):
    threading.Thread.__init__(self)
    self.task = task
  def run(self):
    '''覆蓋父類的run方法'''
    while True:
      url = self.task.get()
      self.download(url)
      self.task.task_done()
  def build_path(self, filename):
    join = os.path.join
    parentPath=join(SAVE_FOLDER,SINGER)
    filename = filename + '.mp3'
    myPath = join(parentPath, filename)
    return myPath
  def download(self, url):
    '''下載文件'''
    sub_url = url.items()
    f_name = sub_url[0][0]
    req_url = sub_url[0][1]
    handle = urllib2.urlopen(req_url)
    # 保存路徑
    save_path = self.build_path(f_name)
    with open(save_path, "wb") as handler:
      while True:
        chunk = handle.read(1024)
        if not chunk:
          break
        handler.write(chunk)
        msg = u"已經(jīng)從 %s下載完成" % req_url
      sys.stdout.write(msg)
      sys.stdout.flush()
class HttpRequest:
  def __init__(self):
    self.task = []
    self.reg_decode = re.compile('<decode>.*?CDATA\[(.*?)\]].*?</decode>')
    self.reg_encode = re.compile('<encode>.*?CDATA\[(.*?)\]].*?</encode>')
    self.init()
    self.target_url = search_url % urllib2.quote(self.encode2utf8(SINGER))
  def encode2utf8(self,source):
    if source and isinstance(source,(str,unicode)):
      source=source.encode("utf8")
      return source
    return source
  def mkDir(self, dir_name):
    if not os.path.exists(dir_name):
      os.mkdir(dir_name)
  def init(self):
    self.mkDir(SAVE_FOLDER)
    subPath = os.path.join(SAVE_FOLDER, SINGER)
    self.mkDir(subPath)
  def http_request(self):
    global song_url
    '''發(fā)起請求'''
    response=urllib2.urlopen(self.target_url)
    # 獲取頭信息
    content = response.read()
    response.close()
    # 使用BeautifulSoup
    html = BeautifulSoup(content, from_encoding="utf8")
    # 提取HTML標簽
    span_tag = html.find_all('div', {"monkey":"song-list"})[0].find_all('span', class_='song-title')
      # 遍歷List
    for a_tag in span_tag:
      song_name = unicode(a_tag.find_all("a")[0].get_text())
      song_url = song_url + urllib2.quote(self.encode2utf8(song_name))
      song_url = song_url + '$$' + urllib2.quote(self.encode2utf8(SINGER)) + '$$$$&url=&listenreelect=0&.r=0.1696378872729838'
      xmlfile = urllib2.urlopen(song_url)
      xml_content = xmlfile.read()
      xmlfile.close()
      url1 = re.findall(self.reg_encode, xml_content)
      url2 = re.findall(self.reg_decode, xml_content)
      if not url1 or not url2:
        continue
      url = url1[0][:url1[0].rindex('/') + 1] + url2[0]
      self.task.append({song_name:url})
    return self.task
def start_download(urls):
  #創(chuàng)建一個隊列
  quene=Queue()
  #獲取list的大小
  size=len(urls)
  #開啟線程
  for _ in xrange(size):
    t=Downloader(quene)
    t.setDaemon(True)
    t.start()
  #入隊列
  for url in urls:
    quene.put(url)
  quene.join()
if __name__=='__main__':
  http=HttpRequest()
  urls=http.http_request()
  start_download(urls)

希望本文所述對大家的Python程序設(shè)計有所幫助。

相關(guān)文章

  • 在Windows中設(shè)置Python環(huán)境變量的實例講解

    在Windows中設(shè)置Python環(huán)境變量的實例講解

    下面小編就為大家分享一篇在Windows中設(shè)置Python環(huán)境變量的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • 國產(chǎn)麒麟系統(tǒng)kylin部署python項目詳細步驟

    國產(chǎn)麒麟系統(tǒng)kylin部署python項目詳細步驟

    這篇文章主要給大家介紹了關(guān)于國產(chǎn)麒麟系統(tǒng)kylin部署python項目的相關(guān)資料,文中通過代碼示例介紹的非常詳細,對大家的學習或者工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-09-09
  • Flask實現(xiàn)圖片的上傳、下載及展示示例代碼

    Flask實現(xiàn)圖片的上傳、下載及展示示例代碼

    這篇文章主要介紹了Flask實現(xiàn)圖片的上傳、下載及展示示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • 詳解Python裝飾器由淺入深

    詳解Python裝飾器由淺入深

    裝飾器的功能在很多語言中都有,名字也不盡相同,其實它體現(xiàn)的是一種設(shè)計模式,強調(diào)的是開放封閉原則,更多的用于后期功能升級而不是編寫新的代碼。本文盡量描述得淺顯易懂,從最基礎(chǔ)的內(nèi)容講起。
    2016-12-12
  • Python尋找路徑和查找文件路徑的示例

    Python尋找路徑和查找文件路徑的示例

    今天小編就為大家分享一篇Python尋找路徑和查找文件路徑的示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Python利用yield?form實現(xiàn)異步協(xié)程爬蟲

    Python利用yield?form實現(xiàn)異步協(xié)程爬蟲

    這篇文章主要為大家詳細介紹了Python如何利用yield?form實現(xiàn)異步協(xié)程爬蟲。其實這是很古老的用法了,現(xiàn)在大多用的aiohttp庫實現(xiàn),這篇記錄僅僅用做個人的協(xié)程底層實現(xiàn)的學習,希望對大家有所幫助
    2022-11-11
  • tensorflow如何繼續(xù)訓練之前保存的模型實例

    tensorflow如何繼續(xù)訓練之前保存的模型實例

    今天小編就為大家分享一篇tensorflow如何繼續(xù)訓練之前保存的模型實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • 利用Python還原方陣游戲詳解

    利用Python還原方陣游戲詳解

    這篇文章的靈感來源于我玩游戲的時候,看見一個大佬在游戲里面建造了“還原方陣游戲”,就感覺很牛掰,就想著python不是有矩陣嗎,可以還原一下呢,感興趣的小伙伴可以了解一下
    2023-01-01
  • python使用Matplotlib畫餅圖

    python使用Matplotlib畫餅圖

    這篇文章主要介紹了python使用Matplotlib畫餅圖,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • 如何利用python讀取圖片屬性信息

    如何利用python讀取圖片屬性信息

    這篇文章主要介紹了如何利用python讀取圖片屬性信息,文章圍繞python讀取信息相關(guān)資料展開全文,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-03-03

最新評論

博客| 宝清县| 苍南县| 裕民县| 河津市| 谢通门县| 东乡| 遂宁市| 清苑县| 宜昌市| 尉犁县| 玉环县| 子洲县| 杨浦区| 水富县| 磴口县| 苏尼特右旗| 六盘水市| 孙吴县| 瑞丽市| 伊吾县| 天镇县| 沙河市| 富平县| 年辖:市辖区| 肃宁县| 五峰| 沁水县| 油尖旺区| 墨江| 肇庆市| 金华市| 华亭县| 资中县| 育儿| 浦北县| 司法| 邵阳县| 罗城| 夏河县| 穆棱市|