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实现各种排序算法的代码示例总结
Dec 11 Python
Python cx_freeze打包工具处理问题思路及解决办法
Feb 13 Python
Mac中升级Python2.7到Python3.5步骤详解
Apr 27 Python
Python数据操作方法封装类实例
Jun 23 Python
对TensorFlow的assign赋值用法详解
Jul 30 Python
Django3.0 异步通信初体验(小结)
Dec 04 Python
python + selenium 刷B站播放量的实例代码
Jun 12 Python
浅谈如何使用python抓取网页中的动态数据实现
Aug 17 Python
python处理写入数据代码讲解
Oct 22 Python
Django REST Framework 分页(Pagination)详解
Nov 30 Python
pytorch通过训练结果的复现设置随机种子
Jun 01 Python
Django中session进行权限管理的使用
Jul 09 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
改造一台复古桌面收音机
2021/03/02 无线电
PHP 伪静态隐藏传递参数名的四种方法
2010/02/22 PHP
php中实现可以返回多个值的函数实例
2015/03/21 PHP
PHP代码维护,重构变困难的4种原因分析
2016/01/25 PHP
仅IE6/7/8中innerHTML返回值忽略英文空格的问题
2011/04/07 Javascript
基于javascipt-dom编程 table对象的使用
2013/04/22 Javascript
jquery实现图片滚动效果的简单实例
2013/11/23 Javascript
一个JavaScript获取元素当前高度的实例
2014/10/29 Javascript
基于jQuery实现的QQ表情插件
2015/08/25 Javascript
Angularjs实现mvvm式的选项卡示例代码
2016/09/08 Javascript
jQuery弹出div层过2秒自动消失
2016/11/29 Javascript
React-router 4 按需加载的实现方式及原理详解
2017/05/25 Javascript
vue2.x+webpack快速搭建前端项目框架详解
2017/11/30 Javascript
原生js调用json方法总结
2018/02/22 Javascript
微信小程序实现通过双向滑动缩放图片大小的方法
2018/12/30 Javascript
关于layui表单中按钮自动提交的解决方法
2019/09/09 Javascript
node+multer实现图片上传的示例代码
2020/02/18 Javascript
[02:05]2014DOTA2西雅图邀请赛 老队长全明星大猜想谁不服就按进显示器
2014/07/08 DOTA
最大K个数问题的Python版解法总结
2016/06/16 Python
Python Django 简单分页的实现代码解析
2019/08/21 Python
基于python实现语音录入识别代码实例
2020/01/17 Python
python读取csv文件指定行的2种方法详解
2020/02/13 Python
Python统计文本词汇出现次数的实例代码
2020/02/27 Python
Pytorch十九种损失函数的使用详解
2020/04/29 Python
Python filter()及reduce()函数使用方法解析
2020/09/05 Python
老板电器官方购物商城:老板油烟机、燃气灶、消毒柜、电烤箱
2018/05/30 全球购物
Gucci法国官方网站:意大利奢侈品牌
2018/07/25 全球购物
linux面试题参考答案(9)
2016/01/29 面试题
介绍一下XMLHttpRequest对象的常用方法和属性
2013/05/24 面试题
《红军不怕远征难》教学反思
2014/04/14 职场文书
优秀班组长事迹
2014/05/31 职场文书
银行反四风对照检查材料
2014/09/29 职场文书
优秀共青团员事迹材料
2014/12/25 职场文书
会议通知范文
2015/04/15 职场文书
2015年中学总务处工作总结
2015/07/22 职场文书
JavaScript声明变量和数据类型的转换
2022/04/12 Javascript