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修改Excel数据的实例代码
Nov 01 Python
利用Python的装饰器解决Bottle框架中用户验证问题
Apr 24 Python
Python yield 使用方法浅析
May 20 Python
解决DataFrame排序sort的问题
Jun 07 Python
Python matplotlib通过plt.scatter画空心圆标记出特定的点方法
Dec 13 Python
详解Python解决抓取内容乱码问题(decode和encode解码)
Mar 29 Python
python中通过selenium简单操作及元素定位知识点总结
Sep 10 Python
Python partial函数原理及用法解析
Dec 11 Python
python面向对象之类属性和类方法案例分析
Dec 30 Python
keras分类模型中的输入数据与标签的维度实例
Jul 03 Python
Python基于内置函数type创建新类型
Oct 22 Python
python录音并调用百度语音识别接口的示例
Dec 01 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/03 咖啡文化
解决ThinkPHP下使用上传插件Uploadify浏览器firefox报302错误的方法
2015/12/18 PHP
PHP基于SMTP协议实现邮件发送实例代码
2017/04/27 PHP
Extjs学习笔记之四 工具栏和菜单
2010/01/07 Javascript
JavaScript 原型继承之构造函数继承
2011/08/26 Javascript
为JavaScript类型增加方法的实现代码(增加功能)
2011/12/29 Javascript
浅析node.js中close事件
2014/11/26 Javascript
跟我学习javascript的prototype原型和原型链
2015/11/18 Javascript
三种Node.js写文件的方式
2016/03/08 Javascript
JavaScript希尔排序、快速排序、归并排序算法
2016/05/08 Javascript
JavaScript寄生组合式继承实例详解
2018/01/06 Javascript
解决vue+element 键盘回车事件导致页面刷新的问题
2018/08/25 Javascript
基于JS抓取某高校附近共享单车位置 使用web方式展示位置变化代码实例
2019/08/27 Javascript
jQuery实现动态操作table行
2020/11/23 jQuery
[46:44]DOTA2-DPC中国联赛 正赛 Ehome vs PSG.LGD BO3 第二场 3月7日
2021/03/11 DOTA
Python中类的继承代码实例
2014/10/28 Python
Python实现在matplotlib中两个坐标轴之间画一条直线光标的方法
2015/05/20 Python
基于python中staticmethod和classmethod的区别(详解)
2017/10/24 Python
Python 实现淘宝秒杀的示例代码
2018/01/02 Python
python将文本分每两行一组并保存到文件
2018/03/19 Python
Selenium chrome配置代理Python版的方法
2018/11/29 Python
Django中提供的6种缓存方式详解
2019/08/05 Python
Python列表的切片实例讲解
2019/08/20 Python
pywinauto自动化操作记事本
2019/08/26 Python
django xadmin action兼容自定义model权限教程
2020/03/30 Python
Python下划线5种含义代码实例解析
2020/07/10 Python
10个python爬虫入门基础代码实例 + 1个简单的python爬虫完整实例
2020/12/16 Python
python绕过图片滑动验证码实现爬取PTA所有题目功能 附源码
2021/01/06 Python
Shopee马来西亚:随拍即卖,最佳行动电商拍卖平台
2017/06/05 全球购物
学生安全承诺书
2014/05/22 职场文书
秋季运动会演讲稿
2014/09/16 职场文书
干部四风问题整改措施思想汇报
2014/10/13 职场文书
2014年网管工作总结
2014/12/11 职场文书
重温入党誓词主持词
2015/06/29 职场文书
500字作文之难忘的同学
2019/12/20 职场文书
我的收音机情缘
2022/04/05 无线电