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 ValueError: invalid literal for int() with base 10 实用解决方法
Jun 21 Python
python 表达式和语句及for、while循环练习实例
Jul 07 Python
Python Flask基础教程示例代码
Feb 07 Python
详谈Python 窗体(tkinter)表格数据(Treeview)
Oct 11 Python
django Admin文档生成器使用详解
Jul 22 Python
python利用datetime模块计算程序运行时间问题
Feb 20 Python
python如何提取英语pdf内容并翻译
Mar 03 Python
Tensorflow之梯度裁剪的实现示例
Mar 08 Python
Python基于wordcloud及jieba实现中国地图词云图
Jun 09 Python
python打开音乐文件的实例方法
Jul 21 Python
社区版pycharm创建django项目的方法(pycharm的newproject左侧没有项目选项)
Sep 23 Python
利用python批量爬取百度任意类别的图片的实现方法
Oct 07 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
CI框架中zip类应用示例
2014/06/17 PHP
PHP函数http_build_query使用详解
2014/08/20 PHP
ThinkPHP中RBAC类的四种用法分析
2014/11/24 PHP
thinkPHP实现的联动菜单功能详解
2017/05/05 PHP
详解Laravel5.6 Passport实现Api接口认证
2018/07/27 PHP
js 变量类型转换常用函数与代码[比较全]
2009/12/01 Javascript
JavaScript关于select的相关操作说明
2010/01/13 Javascript
firefox下frameset取不到值的解决方法
2010/09/06 Javascript
JavaScript图片放大技术(放大镜)实现代码分享
2013/11/14 Javascript
JavaScript转换二进制编码为ASCII码的方法
2015/04/16 Javascript
js实现基于正则表达式的轻量提示插件
2015/08/29 Javascript
Javascript实现检测客户端类型代码封包
2015/12/03 Javascript
Js得到radiobuttonlist选中值的两种方法(推荐)
2016/08/25 Javascript
vue.js 左侧二级菜单显示与隐藏切换的实例代码
2017/05/23 Javascript
Thinkjs3新手入门之如何使用静态资源目录
2017/12/06 Javascript
JavaScript实现多个物体同时运动
2020/03/12 Javascript
Python sys.path详细介绍
2013/10/17 Python
Python获取当前时间的方法
2014/01/14 Python
Python中列表、字典、元组、集合数据结构整理
2014/11/20 Python
浅谈Python中的闭包
2015/07/08 Python
Python socket实现的简单通信功能示例
2018/08/21 Python
python 随机森林算法及其优化详解
2019/07/11 Python
Tensorflow卷积实现原理+手写python代码实现卷积教程
2020/05/22 Python
Python如何对齐字符串
2020/07/30 Python
css3新增颜色表示方式分享
2014/04/15 HTML / CSS
韩国著名的在线综合购物网站:Akmall
2016/08/07 全球购物
澳大利亚便宜隐形眼镜购买网站:QUICKLENS Australia
2018/10/06 全球购物
卡骆驰英国官网:Crocs英国
2019/08/22 全球购物
毕业生自荐书模版
2014/01/04 职场文书
初中数学教学反思
2014/01/16 职场文书
高效课堂标语
2014/06/26 职场文书
小学兴趣小组活动总结
2014/07/07 职场文书
要账委托书范本
2014/09/15 职场文书
自愿离婚协议书范本
2015/01/26 职场文书
合理化建议书
2015/02/04 职场文书
详解CSS开发过程中的20个快速提升技巧
2021/05/21 HTML / CSS