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


Posted in Python onNovember 21, 2014

下载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网络编程学习笔记(五):socket的一些补充
Jun 09 Python
Python bsddb模块操作Berkeley DB数据库介绍
Apr 08 Python
简单谈谈python中的语句和语法
Aug 10 Python
Zookeeper接口kazoo实例解析
Jan 22 Python
Python异常处理操作实例详解
May 10 Python
Python模拟浏览器上传文件脚本的方法(Multipart/form-data格式)
Oct 22 Python
python 快速把超大txt文件转存为csv的实例
Oct 26 Python
Python设计模式之享元模式原理与用法实例分析
Jan 11 Python
Python二叉树的镜像转换实现方法示例
Mar 06 Python
Python实现检测文件的MD5值来查找重复文件案例
Mar 12 Python
Python实现的北京积分落户数据分析示例
Mar 27 Python
Python 如何利用ffmpeg 处理视频素材
Nov 27 Python
Python常用模块介绍
Nov 21 #Python
Python使用py2exe打包程序介绍
Nov 20 #Python
Python实现的tab文件操作类分享
Nov 20 #Python
Python实现的ini文件操作类分享
Nov 20 #Python
Python中列表、字典、元组、集合数据结构整理
Nov 20 #Python
python有证书的加密解密实现方法
Nov 19 #Python
Python采用socket模拟TCP通讯的实现方法
Nov 19 #Python
You might like
实现分十页分向前十页向后十页的处理
2006/10/09 PHP
php获得文件扩展名三法
2006/11/25 PHP
php调用Google translate_tts api实现代码
2013/08/07 PHP
PHP内核探索:变量概述
2014/01/30 PHP
PHP实现多图上传(结合uploadify插件)思路分析
2016/11/30 PHP
js post方式传递提交的实现代码
2010/05/31 Javascript
Draggable Elements 元素拖拽功能实现代码
2011/03/30 Javascript
JSONP跨域的原理解析及其实现介绍
2014/03/22 Javascript
javascript实现倒计时(精确到秒)
2015/06/26 Javascript
分享12个实用的jQuery代码片段
2016/03/09 Javascript
bootstrap基本配置_动力节点Java学院整理
2017/07/14 Javascript
详解用node搭建简单的静态资源管理器
2017/08/09 Javascript
Js利用Canvas实现图片压缩功能
2017/09/13 Javascript
mongodb初始化并使用node.js实现mongodb操作封装方法
2019/04/02 Javascript
vue项目中极验验证的使用代码示例
2019/12/03 Javascript
Javascript地址引用代码实例解析
2020/02/25 Javascript
vue cli4.0项目引入typescript的方法
2020/07/17 Javascript
socket + select 完成伪并发操作的实例
2017/08/15 Python
TensorFlow 实战之实现卷积神经网络的实例讲解
2018/02/26 Python
详解Python下ftp上传文件linux服务器
2018/06/21 Python
python 在某.py文件中调用其他.py内的函数的方法
2019/06/25 Python
Django视图扩展类知识点详解
2019/10/25 Python
使用Python对Dicom文件进行读取与写入的实现
2020/04/20 Python
Python定义函数实现累计求和操作
2020/05/03 Python
如何理解python对象
2020/06/21 Python
HTML5 Canvas实现玫瑰曲线和心形图案的代码实例
2014/04/10 HTML / CSS
.NET面试题:什么是反射
2016/09/30 面试题
网络安全类面试题
2015/08/01 面试题
迎元旦广播稿
2014/02/22 职场文书
气象学专业个人求职信
2014/04/22 职场文书
安全口号大全
2014/06/21 职场文书
职业道德模范事迹材料
2014/08/24 职场文书
鼋头渚导游词
2015/02/05 职场文书
2015年社区消防安全工作总结
2015/10/14 职场文书
《七月的天山》教学反思
2016/02/19 职场文书
图文详解Nginx版本平滑升级方案
2021/09/15 Servers