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设计足球联赛赛程表程序的思路与简单实现示例
Jun 28 Python
JPype实现在python中调用JAVA的实例
Jul 19 Python
python使用循环打印所有三位数水仙花数的实例
Nov 13 Python
详解python中递归函数
Apr 16 Python
记录Python脚本的运行日志的方法
Jun 05 Python
Python3简单实现串口通信的方法
Jun 12 Python
Python实现直播推流效果
Nov 26 Python
python飞机大战 pygame游戏创建快速入门详解
Dec 17 Python
关于keras中keras.layers.merge的用法说明
May 23 Python
python request 模块详细介绍
Nov 10 Python
pandas 数据类型转换的实现
Dec 29 Python
Python创建简单的神经网络实例讲解
Jan 04 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
一个简单的php实现的MySQL数据浏览器
2007/03/11 PHP
php chr() ord()中文截取乱码问题解决方法
2008/09/08 PHP
PHP使用get_headers函数判断远程文件是否存在的方法
2014/11/28 PHP
php计划任务之ignore_user_abort函数实现方法
2015/01/08 PHP
Yii2-GridView 中让关联字段带搜索和排序功能示例
2017/01/21 PHP
PHP正则之正向预查与反向预查讲解与实例
2020/04/06 PHP
Javascript中的变量使用说明
2010/05/18 Javascript
js列举css中所有图标的实现代码
2011/07/04 Javascript
jQuery动态显示和隐藏datagrid中的某一列的方法
2013/12/11 Javascript
javascript中typeof操作符和constucor属性检测
2015/02/26 Javascript
javascript实现模拟时钟的方法
2015/05/13 Javascript
jquery实现最简单的滑动菜单效果代码
2015/09/12 Javascript
JavaScript 七大技巧(二)
2015/12/13 Javascript
JavaScript缓冲运动实现方法(2则示例)
2016/01/08 Javascript
Boostrap实现的登录界面实例代码
2016/10/09 Javascript
Dropzone.js实现文件拖拽上传功能(附源码下载)
2016/11/22 Javascript
谈谈JavaScript数组常用方法总结
2017/01/24 Javascript
Bootstrap fileinput文件上传预览插件使用详解
2017/05/16 Javascript
判断div滑动到底部的scroll实例代码
2017/11/15 Javascript
Python实现的破解字符串找茬游戏算法示例
2017/09/25 Python
从CentOS安装完成到生成词云python的实例
2017/12/01 Python
Python机器学习之决策树算法实例详解
2017/12/06 Python
PyTorch快速搭建神经网络及其保存提取方法详解
2018/04/28 Python
Python流程控制 while循环实现解析
2019/09/02 Python
Django多数据库配置及逆向生成model教程
2020/03/28 Python
Python ellipsis 的用法详解
2020/11/20 Python
计算机网络专业个人的自我评价
2013/10/17 职场文书
大学生职业生涯规划范文——找准自我,定位人生
2014/01/23 职场文书
税务干部个人整改措施思想汇报
2014/10/10 职场文书
机关作风建设剖析材料
2014/10/11 职场文书
学习心理学的体会
2014/11/07 职场文书
小学科学教学计划
2015/01/21 职场文书
2015年助残日活动总结
2015/03/27 职场文书
办公室规章制度范本
2015/08/04 职场文书
导游词之天津盘山
2019/11/01 职场文书
Win11 Build 22000.829更新补丁KB5015882发布(附更新修复内容汇总)
2022/07/15 数码科技