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的id()函数解密过程
Dec 25 Python
Python中用format函数格式化字符串的用法
Apr 08 Python
Python与Java间Socket通信实例代码
Mar 06 Python
python snownlp情感分析简易demo(分享)
Jun 04 Python
python按时间排序目录下的文件实现方法
Oct 17 Python
Python中super函数用法实例分析
Mar 18 Python
python 3.7.4 安装 opencv的教程
Oct 10 Python
在Sublime Editor中配置Python环境的详细教程
May 03 Python
python读写数据读写csv文件(pandas用法)
Dec 14 Python
linux centos 7.x 安装 python3.x 替换 python2.x的过程解析
Dec 14 Python
PyCharm常用配置和常用插件(小结)
Feb 06 Python
Jupyter notebook 不自动弹出网页的解决方案
May 21 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
索尼ICF-SW100收音机评测
2021/03/02 无线电
Laravel实现用户注册和登录
2015/01/23 PHP
Yii实现单用户博客系统文章详情页插入评论表单的方法
2015/12/28 PHP
PHP实现的折半查询算法示例
2017/10/09 PHP
Ctrl+Enter提交内容信息
2006/06/26 Javascript
window.name代替cookie的实现代码
2010/11/28 Javascript
jQuery UI Dialog控件中的表单无法正常提交的解决方法
2010/12/19 Javascript
jQuery ajax serialize() 方法使用示例
2014/11/02 Javascript
javascript 回调函数详解
2014/11/11 Javascript
11种ASP连接数据库的方法
2015/09/18 Javascript
基于BootStrap Metronic开发框架经验小结【一】框架总览及菜单模块的处理
2016/05/12 Javascript
详解javascript事件绑定使用方法
2016/10/20 Javascript
设置jquery UI 控件的大小方法
2016/12/12 Javascript
JS实现密码框的显示密码和隐藏密码功能示例
2016/12/26 Javascript
javascript阻止事件冒泡和浏览器的默认行为
2017/01/21 Javascript
node.js中express中间件body-parser的介绍与用法详解
2017/05/23 Javascript
Mint UI 基于 Vue.js 移动端组件库
2017/11/07 Javascript
修改node.js默认的npm安装目录实例
2018/05/15 Javascript
CentOS7中源码编译安装NodeJS的完整步骤
2018/10/13 NodeJs
详解如何使用node.js的开发框架express创建一个web应用
2018/12/20 Javascript
jQuery选择器之基本过滤选择器用法实例分析
2019/02/19 jQuery
使用JQuery自动完成插件Auto Complete详解
2019/06/18 jQuery
Vue通过配置WebSocket并实现群聊功能
2019/12/31 Javascript
Vue export import 导入导出的多种方式与区别介绍
2020/02/12 Javascript
Python中尝试多线程编程的一个简明例子
2015/04/07 Python
Python字典及字典基本操作方法详解
2018/01/30 Python
python处理csv中的空值方法
2018/06/22 Python
Django框架之DRF 基于mixins来封装的视图详解
2019/07/23 Python
Python如何获取文件指定行的内容
2020/05/27 Python
详解vscode实现远程linux服务器上Python开发
2020/11/10 Python
Selenium 配置启动项参数的方法
2020/12/04 Python
python 如何把docker-compose.yaml导入到数据库相关条目里
2021/01/15 Python
SQL里面如何插入自动增长序列号字段
2012/03/29 面试题
咨询公司各岗位职责
2013/12/02 职场文书
房地产开发计划书
2014/01/10 职场文书
清正廉洁演讲稿
2014/05/22 职场文书