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将多个文本文件合并为一个文本的代码(便于搜索)
Mar 13 Python
Python 列表list使用介绍
Nov 30 Python
Python实现HTTP协议下的文件下载方法总结
Apr 20 Python
python 格式化输出百分号的方法
Jan 20 Python
python多任务及返回值的处理方法
Jan 22 Python
Python学习笔记之字符串和字符串方法实例详解
Aug 22 Python
基于python全局设置id 自动化测试元素定位过程解析
Sep 04 Python
Python爬虫 urllib2的使用方法详解
Sep 23 Python
python调用Matplotlib绘制分布点图
Oct 18 Python
python实现单张图像拼接与批量图片拼接
Mar 23 Python
Django Form常用功能及代码示例
Oct 13 Python
python实现MD5进行文件去重的示例代码
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
getJSON跨域SyntaxError问题分析
2014/08/07 PHP
浅谈php中fopen不能创建中文文件名文件的问题
2017/02/06 PHP
PHP explode()函数用法讲解
2019/02/15 PHP
ThinkPHP3.1.2 使用cli命令行模式运行的方法
2020/04/14 PHP
php中使用array_filter()函数过滤数组实例讲解
2021/03/03 PHP
30个最好的jQuery 灯箱插件分享
2011/04/25 Javascript
javascript中xml操作实现代码
2011/11/21 Javascript
JS获得URL超链接的参数值实例代码
2013/06/21 Javascript
js动态添加事件并可传参数示例代码
2013/10/21 Javascript
addEventListener()第三个参数useCapture (Boolean)详细解析
2013/11/07 Javascript
使用text方法获取Html元素文本信息示例
2014/09/01 Javascript
使用Promise解决多层异步调用的简单学习心得
2016/05/17 Javascript
AngularJS实现单独作用域内的数据操作
2016/09/05 Javascript
javascript动画之磁性吸附效果篇
2016/12/09 Javascript
jQuery网页定位导航特效实现方法
2016/12/19 Javascript
BootStrap Table后台分页时前台删除最后一页所有数据refresh刷新后无数据问题
2016/12/28 Javascript
深入理解Nodejs Global 模块
2017/06/03 NodeJs
React-Native做一个文本输入框组件的实现代码
2017/08/10 Javascript
详解 vue.js用法和特性
2017/10/15 Javascript
javascript实现鼠标点击生成文字特效
2019/12/24 Javascript
JS快速实现简单计算器
2020/04/08 Javascript
ES6扩展运算符和rest运算符用法实例分析
2020/05/23 Javascript
[03:17]DOTA2英雄基础教程 剧毒术士
2013/12/12 DOTA
[41:08]TNC vs VG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
最基础的Python的socket编程入门教程
2015/04/23 Python
RC4文件加密的python实现方法
2015/06/30 Python
用Python编写简单的微博爬虫
2016/03/04 Python
Python numpy中矩阵的基本用法汇总
2019/02/12 Python
python打印n位数“水仙花数”(实例代码)
2019/12/25 Python
澳大利亚最大的护发和护肤品购物网站:RY
2019/12/26 全球购物
自我鉴定模板
2013/10/29 职场文书
《秋姑娘的信》教学反思
2014/02/28 职场文书
简历自我评价优缺点
2015/03/11 职场文书
高考诚信考试承诺书
2015/04/29 职场文书
当幸福来敲门观后感
2015/06/01 职场文书
Django开发RESTful API实现增删改查(入门级)
2021/05/10 Python