Python实现的下载8000首儿歌的代码分享

 更新时间:2014年11月21日 08:58:30   投稿:junjie  
这篇文章主要介绍了Python实现的下载8000首儿歌的代码分享,本文直接给出实现代码,下载的是有伴网的资源,需要的朋友可以参考下

下载8000首儿歌的python的代码:

复制代码 代码如下:

#-*- coding: UTF-8 -*-

from pyquery import PyQuery as py
from lxml import etree
import urllib
import re
import os
import sys
import logging

def format(filename):
    tuple=(' ',''','\'')
    for char in tuple:
        if (filename.find(char)!=-1):
            filename=filename.replace(char,"_")
    return filename

def download_mp3(mp3_url, filename,dir):      
    f = dir+"\\"+filename
    if os.path.exists(f):
      logger.debug(f+" is existed.")
      return
     
    try:
        open(f, 'wb').write(urllib.urlopen(mp3_url).read())
        logger.debug(  filename + ' is downloaded.')
    except:
        logger.debug( filename + ' is not downloaded.')

       
def download_all_mp3(start,end,dir,logger):
  for x in range(start,end):
    try:
        url = "http://www.youban.com/mp3-d" + str(x) + ".html"
        logger.debug(str(x) + ": "+url)
        doc = py(url=url)
        e = doc('.mp3downloadbox')
        if e is None or e == '':
          logger.debug(url+" is not existed.")
          return
         
        e = unicode(e)
        #logger.debug( e)
        regex = re.compile(ur".*<h1>(.*)</h1>.*downloadboxlist.*?<a.*?\"(.*?)\"",re.UNICODE|re.S)
        m = regex.search(e)
        if m is not None:
          title = m.group(1).strip()
          title2 = str(x)+"_"+title + ".mp3"
          #title2 = re.sub(' ','_',title2)
          title2 = format(title2)
          link = m.group(2)
          #logger.debug( "title:" + title + " link:" + link)
          if link == '' or title == '':
            logger.debug(url + " is not useful")
            continue
          logger.debug(str(x)+": "+link)
          download_mp3(link,title2,dir)
    except:
        logger.debug(url+" met exception.")
        continue
     

     
if __name__ == "__main__":
    dir_root = "e:\\song"
    if sys.argv[3] != '': dir_root=sys.argv[3]
   
    start,end = 1,8000
    if sys.argv[1] >= 0 and sys.argv[2]>=0:
      start,end = int(sys.argv[1]),int(sys.argv[2])
      print ("Download from %s to %s.\n" % (start,end))     
   
    dir = dir_root + "\\"+str(start)+"-"+str(end)
    if not os.path.exists(dir):
      os.mkdir(dir)    
    print "Download to " + dir + ".\n"
   
    logger = logging.getLogger("simple")
    logger.setLevel(logging.DEBUG) 
    fh = logging.FileHandler(dir+"\\"+"download.log")
    ch = logging.StreamHandler()
    formatter = logging.Formatter("%(message)s")
    ch.setFormatter(formatter)
    fh.setFormatter(formatter)
    logger.addHandler(ch)
    logger.addHandler(fh)
    download_all_mp3(start,end,dir,logger)

有需要的可以参考继续修改。

相关文章

  • 基于Python实现本地音乐播放器的制作

    基于Python实现本地音乐播放器的制作

    这篇文章主要介绍了如何利用Python实现本地音乐播放器的制作,并且可以选择需要播放的音乐的路径,选择播放方式,感兴趣的小伙伴可以了解一下
    2022-06-06
  • Python pip安装如何切换国内源

    Python pip安装如何切换国内源

    在Python开发中,pip是一个非常重要的工具,它允许我们安装和管理Python包,本文将介绍如何切换pip的国内源,并推荐几个常用的国内源,感兴趣的朋友一起看看吧
    2024-04-04
  • python 并发下载器实现方法示例

    python 并发下载器实现方法示例

    这篇文章主要介绍了python 并发下载器实现方法,结合实例形式详细分析了并发下载器相关原理及Python并发下载视频的相关操作技巧,需要的朋友可以参考下
    2019-11-11
  • 一文带你弄懂Python3中的def __init__

    一文带你弄懂Python3中的def __init__

    说起基础的init函数也是我们的老朋友了,组合函数的要么是理解又一定的难度,要么是操作方法有复杂的地方,小编今天要讲的def __init()__属于第一种,下面这篇文章主要给大家介绍了关于如何通过一文带你弄懂Python3中的def __init__的相关资料,需要的朋友可以参考下
    2022-12-12
  • Python读取网页内容的方法

    Python读取网页内容的方法

    这篇文章主要介绍了Python读取网页内容的方法,实例分析了Python基于URL读取网页内容的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • 基于Python实现图片九宫格切图程序

    基于Python实现图片九宫格切图程序

    这篇文章主要为大家详细介绍了如何利用python和C++代码实现图片九宫格切图程序,文中的示例代码讲解详细,具有一定的借鉴价值,需要的可以参考一下
    2023-04-04
  • python异常处理、自定义异常、断言原理与用法分析

    python异常处理、自定义异常、断言原理与用法分析

    这篇文章主要介绍了python异常处理、自定义异常、断言,结合实例形式分析了python异常处理、自定义异常、断言相关概念、原理、用法及操作注意事项,需要的朋友可以参考下
    2020-03-03
  • python 使用fileinput读取文件

    python 使用fileinput读取文件

    这篇文章主要介绍了python 使用fileinput读取文件,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下
    2021-03-03
  • Pytorch Conda环境pack打包迁移报错的处理方案

    Pytorch Conda环境pack打包迁移报错的处理方案

    这篇文章主要介绍了Pytorch Conda环境pack打包迁移报错的处理方案,文中通过代码示例和图文结合的方式给大家介绍的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-07-07
  • numpy实现RNN原理实现

    numpy实现RNN原理实现

    这篇文章主要介绍了numpy实现RNN原理实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03

最新评论