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 表达式和语句及for、while循环练习实例
Jul 07 Python
Python基础练习之用户登录实现代码分享
Nov 08 Python
python opencv设置摄像头分辨率以及各个参数的方法
Apr 02 Python
python实现ID3决策树算法
Aug 29 Python
对Python3中bytes和HexStr之间的转换详解
Dec 04 Python
python在TXT文件中按照某一字符串取出该字符串所在的行方法
Dec 10 Python
python求加权平均值的实例(附纯python写法)
Aug 22 Python
TensorFlow使用Graph的基本操作的实现
Apr 22 Python
Python检测端口IP字符串是否合法
Jun 05 Python
python excel多行合并的方法
Dec 09 Python
python实现大文本文件分割成多个小文件
Apr 20 Python
这样写python注释让代码更加的优雅
Jun 02 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
海贼王动画变成“真人”后,凯多神还原,雷利太帅了!
2020/04/09 日漫
收音机频率指针指示不准确和灵敏度低问题
2021/03/02 无线电
ajax 的post方法实例(带循环)
2011/07/04 PHP
Zend Framework教程之模型Model用法简单实例
2016/03/04 PHP
详解php中 === 的使用
2016/10/24 PHP
如何运行/调试你的PHP代码
2020/10/23 PHP
Jquery.TreeView结合ASP.Net和数据库生成菜单导航条
2010/08/27 Javascript
JavaScript中的稀疏数组与密集数组[译]
2012/09/17 Javascript
Javascript变量作用域详解
2013/12/06 Javascript
JS自调用匿名函数具体实现
2014/02/11 Javascript
跟我学习javascript的隐式强制转换
2015/11/16 Javascript
javascript事件冒泡简单示例
2016/06/20 Javascript
javascript之with的使用(阿里云、淘宝使用代码分析)
2016/10/11 Javascript
浅谈Angular文字折叠展开组件的原理分析
2017/11/24 Javascript
Vue页面跳转动画效果的实现方法
2018/09/23 Javascript
基于vue-cli npm run build之后vendor.js文件过大的解决方法
2018/09/27 Javascript
如何用JavaScript实现功能齐全的单链表详解
2019/02/11 Javascript
jQuery - AJAX load() 实例用法详解
2019/08/27 jQuery
JS代码触发事件代码实例
2020/01/02 Javascript
[01:02:53]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第二局
2016/03/06 DOTA
python3图片转换二进制存入mysql
2013/12/06 Python
python简单线程和协程学习心得(分享)
2017/06/14 Python
用python的requests第三方模块抓取王者荣耀所有英雄的皮肤实例
2017/12/14 Python
Django框架实现逆向解析url的方法
2018/07/04 Python
python操作excel文件并输出txt文件的实例
2018/07/10 Python
通过python将大量文件按修改时间分类的方法
2018/10/17 Python
python判断列表的连续数字范围并分块的方法
2018/11/16 Python
Python OpenCV中的resize()函数的使用
2019/06/20 Python
Python进阶之迭代器与迭代器切片教程
2020/01/29 Python
Html5页面上如何禁止手机虚拟键盘弹出
2020/03/19 HTML / CSS
戴森西班牙官网:Dyson西班牙
2020/02/04 全球购物
2014年度安全工作总结
2014/12/04 职场文书
学雷锋团日活动总结
2015/05/06 职场文书
新教师2015年度工作总结
2015/07/22 职场文书
ORM模型框架操作mysql数据库的方法
2021/07/25 MySQL
Windows server 2012 R2 安装IIS服务器
2022/04/29 Servers