Python实现的下载8000首儿歌的代码分享
admin
2023-07-31 02:11:04
0

下载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\”.*

(.*)

.*downloadboxlist.*?         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)

有需要的可以参考继续修改。

相关内容

热门资讯

500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
Prometheus+Graf... 一,Prometheus概述 1,什么是Prometheus?Prometheus是最初在Sound...
python绘图库Matplo... 本文简单介绍了Python绘图库Matplotlib的安装,简介如下: matplotlib是pyt...