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中的URLError异常的方法
Apr 30 Python
Python简单删除列表中相同元素的方法示例
Jun 12 Python
python抓取网站的图片并下载到本地的方法
May 22 Python
Python Learning 列表的更多操作及示例代码
Aug 22 Python
基于Python函数和变量名解析
Jul 19 Python
win10子系统python开发环境准备及kenlm和nltk的使用教程
Oct 14 Python
Tkinter中复选菜单是否被选中的判断与设置方式
Mar 04 Python
django实现将后台model对象转换成json对象并传递给前端jquery
Mar 16 Python
详细分析Python垃圾回收机制
Jul 01 Python
keras和tensorflow使用fit_generator 批次训练操作
Jul 03 Python
浅谈Django前端后端值传递问题
Jul 15 Python
使用Python制作一盏 3D 花灯喜迎元宵佳节
Feb 26 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
session 的生命周期是多长
2006/10/09 PHP
层叠菜单的动态生成
2006/10/09 PHP
Windows下php+mysql5.7配置教程
2017/05/16 PHP
获取URL地址中的文件名和参数的javascript代码
2009/09/02 Javascript
js 动态选中下拉框
2009/11/26 Javascript
跨浏览器开发经验总结(三)   警惕“IE依赖综合症”
2010/05/13 Javascript
javascript下对于事件、事件流、事件触发的顺序随便说说
2010/07/17 Javascript
nullJavascript中创建对象的五种方法实例
2013/05/07 Javascript
js验证模型自我实现的具体方法
2013/06/21 Javascript
JS中eval函数的使用示例
2013/07/21 Javascript
web前端设计师们常用的jQuery特效插件汇总
2014/12/07 Javascript
深入分析jquery解析json数据
2014/12/09 Javascript
jquery插件jquery.beforeafter.js实现左右拖拽分隔条对比图片的方法
2015/08/07 Javascript
JQuery遍历元素的后代和同胞实现方法
2016/09/18 Javascript
JavaScript 监控微信浏览器且自带返回按钮时间
2016/11/27 Javascript
解决cordova+vue 项目打包成APK应用遇到的问题
2019/05/10 Javascript
使用Layui搭建后台管理界面的操作方法
2019/09/20 Javascript
Python编程实战之Oracle数据库操作示例
2017/06/21 Python
使用Python通过win32 COM打开Excel并添加Sheet的方法
2018/05/02 Python
利用Python读取txt文档的方法讲解
2018/06/23 Python
python判断字符串或者集合是否为空的实例
2019/01/23 Python
Python selenium模拟手动操作实现无人值守刷积分功能
2020/05/13 Python
python对一个数向上取整的实例方法
2020/06/18 Python
使用Filters滤镜弥补CSS3的跨浏览器问题以及兼容低版本IE
2013/01/23 HTML / CSS
找到不普通的东西:Bonanza
2016/10/20 全球购物
Probikekit欧盟:在线公路自行车专家
2019/07/12 全球购物
什么是Connection-oriented Protocol/Connectionless Protocol面向连接的协议/无连接协议
2012/09/06 面试题
领导干部培训感言
2014/01/23 职场文书
便利店促销方案
2014/02/20 职场文书
小班开学寄语
2014/04/04 职场文书
公司优秀员工推荐信
2015/03/24 职场文书
婚宴祝酒词大全
2015/08/10 职场文书
Python绘制地图神器folium的新人入门指南
2021/05/23 Python
利用Pycharm连接服务器的全过程记录
2021/07/01 Python
Java 在生活中的 10 大应用
2021/11/02 Java/Android
JavaScript原型链详解
2021/11/07 Javascript