. : : ClassiClub ForuM : : .

会员中心 论坛帮助 日历事件 标记论坛已读
返回   精品技术论坛 » 技术论坛 » 『软件使用』 » 专题:命令正则

『软件使用』: 电脑软件推荐, 电脑软件使用, 经验分享



发表新主题 关闭主题
 
主题工具
namejm
 
namejm 的头像
超级会员
 
资 料:
注册日期: Apr 2009
帖子: 1,363 声望值: 3
精华: 21,解答: 83
#1 旧 2011-04-23, 16:43:02 Icon20 【原创】用批处理整理百度MP3上歌曲排行榜MP3及LRC文件的批量下载链接地址
namejm 当前离线  

  为防止百度搜索引擎前来抓取,正文部分以图片形式发出来,请各位见谅。
  需要两个软件的配合:1、迅雷5.9之前的版本;2、命令行工具wget.exe
  有网友反映说迅雷5.9及其之后的版本已经不支持以注释重命名文件,特放出支持以注释内容重命名文件的迅雷版本:5.8.10.675的绿色去广告版本。
  再提供 wget 1.10.2 的打包下载,以前提供的 wget.exe 1.11.4 并不是命令行的单行版,还需要几个dll的支持,不再提供。
上传的图像
文件类型: png 正文.png (190.6 KB, 578 次查看)
上传的附件
文件类型: rar 迅雷5.8.10.675无广告绿色超级精简版.part1.rar (1.43 MB, 37 次查看)
文件类型: rar 迅雷5.8.10.675无广告绿色超级精简版.part2.rar (1.27 MB, 34 次查看)
文件类型: rar wget 1.10.2.rar (317.6 KB, 32 次查看)

此帖于 2011-04-30 20:51:18 被 namejm 编辑. .


TotalCommder、EveryThing、batch、AutoHotKey、EverEdit
精通Word、Excel、PPT的安装与卸载
熟练掌握VB、C++、SQL的拼读与缩写
namejm
 
namejm 的头像
超级会员
 
资 料:
注册日期: Apr 2009
帖子: 1,363 声望值: 3
精华: 21,解答: 83
#2 旧 2011-04-23, 16:44:37 默认
namejm 当前离线  

  奉上代码:
代码:
@echo off
:: 功能:
:: 整理百度MP3歌曲排行榜中除了“中文金曲”和“中国民乐”之外所有榜单的分类下载链接
:: 对MP3文件:整理出供迅雷5等软件批量下载的、有效的mp3文件地址,并统计该榜单下mp3文件的总数、有效下载链接的总数;提供备用的mp3文件下载链接;列出下载链接可能已经失效的mp3文件;
:: 对LRC文件:整理出供迅雷5等软件批量下载的、有效的lrc文件地址,并统计该榜单下lrc文件的总数、有效下载链接的总数;同时下载百度服务器上存在的lrc文件;列出下载链接可能已经失效的lrc文件;


:Main
cls
title 百度MP3歌曲排行榜下载链接整理器
echo.&echo.
echo 选择每个项目前的数字序号
echo 可以整理该类别下所有MP3的有效下载链接
echo 并可以下载这些MP3对应的歌词LRC文件
echo 可以多选,但是必须以空格分隔
echo 多选时不用考虑先后次序
echo 例如选择代码时填写 5 1 8
echo 会依次下载“影视金曲”,“新歌TOP100”和“流金岁月”
echo 0与其他选项组合时会造成重复下载

echo.
echo ==========================================================
echo.

setlocal enabledelayedexpansion
set num=0
for /f "tokens=1-3" %%i in (榜单分类.ini) do (
    set /a num+=1
    set /a mod=!num!%%2
    set /p=	%%i.%%j	<nul
    if !mod! equ 0 echo.&echo.
)
echo.
set /p=		0.前面的所有类别<nul
echo.
echo ==========================================================
echo.
endlocal

set choice=
set /p choice= 请输入选择代码(0/1/2/3/4/5/6/7/8/9):

cls
if not defined choice goto Main
for %%i in (%choice%) do (
    if not "%%i"=="0" (
        for /f "tokens=1-3" %%j in (榜单分类.ini) do (
            if "%%i"=="%%j" (
                call :Neaten "%%k" "%%l"
                call :end "%%k"
            )
        )
    )else (
        for /f "tokens=1-3" %%j in (榜单分类.ini) do (
            call :Neaten "%%k" "%%l"
            call :end "%%k"
        )
    )
)
call :end
pause
goto Main

:Neaten
setlocal enabledelayedexpansion

md "%~1\xml" 2>nul
wget -O "%~1\%~nx2" "%~2"

:: 功能:从分类排行榜首页提取出歌曲序号、歌曲名和歌手名,并取回包含真实下载链接的xml文件
:: 歌曲排行随时在变动,清空以前保存的xml文件,以保证不下载过期链接
:: xml文件的下载地址是:http://box.zhangmen.baidu.com/x?op=12&count=1&title=歌曲名$$歌手名$$$
del /a /f /q "%1\xml\*.xml" 2>nul
set num=0
for /f "delims==" %%i in ('set name 2^>nul') do set "%%i="
for /f "delims=" %%i in ('findstr /i "td.class=\"td[b-d]\"" "%~1\%~nx2"') do (
    for /f "tokens=*" %%j in ("%%i") do (
        set /a num+=1
        for /f "delims=<> tokens=3" %%k in ("%%j") do (
            set "name!num!=%%k"
            if !num! equ 2 (
                if "!name2:~-3!"=="..." (
                    for /f "tokens=4 delims='" %%l in ("%%j") do set "name2=%%l"
                )
            )
            if !num! equ 3 (
                if "!name3:~-3!"=="..." (
                    for /f "tokens=2 delims='" %%l in ("%%j") do set "name3=%%l"
                )
                set name1=00!name1!
                set name1=!name1:~-3!
                if "!name3!"=="/a" set "name3="
                title 正在下载 %~1 分类下 "!name1!_!name2!_!name3!.mp3" 的xml数据
                wget -nv -N -O "%~1\xml\!name1!_!name2!_!name3!.xml" "http://box.zhangmen.baidu.com/x?op=12&count=1&title=!name2!$$!name3!$$$"
                set num=0
            )
        )
    )
)
endlocal



for /f "delims=" %%i in ('findstr /i "td.class=\"tdb\"" "%~1\%~nx2"') do set "str=%%i"
for /f "tokens=*" %%i in ("%str%") do (
    for /f "delims=<> tokens=3" %%j in ("%%i") do set SongNum=%%j
)

:: 功能:整理有效的下载列表,下载对应的歌词文件,列出下载链接已经失效的mp3文件
cls
title 整理%~1的下载链接列表并下载对应的歌词文件
for %%i in (%~1\%~nx2) do set ModifiedTime=%%~ti

for %%i in (MP3 LRC) do (
    (
    echo ^<html^>
    echo ^<title^>百度MP3歌曲排行:%~1^<^/title^>
    echo ^<style type="text/css"^>
    echo ^<!--
    echo a:link { text-decoration: none;color: blue}
    echo a:active { text-decoration:blink}
    echo a:hover { text-decoration:underline;color: red}
    echo a:visited { text-decoration: none;color: green}
    echo --^>
    echo ^<^/style^>
    echo ^<body^>
    echo ^<b^>“百度MP3歌曲排行:%~1”列表更新时间:%ModifiedTime%^<^/b^>^<br^>
    echo ^<font color="red"^>^<b^>注意:以下内容并非“%~1”的全部,仅列出了有效的%%i下载链接^<^/b^>^<^/font^>^<br^>
    if /i "%%i"=="mp3" (
        echo ^<font color="red"^>^<b^>   当本页面中的某些mp3文件下载失败时,请到“%~1mp3备用下载链接.html”中选择相应的备用地址进行下载^<^/b^>^<^/font^>^<br^>
        echo ^<font color="red"^>^<b^>   下载链接有可能失效的mp3文件列表请查看“下载链接可能已经失效的mp3列表.txt”^<^/b^>^<^/font^>
    )
    echo ^<p^>
    echo 批量下载本页面列出的%%i文件的方法(以迅雷5为例,迅雷7不适用):^<br^>
    echo   若您已经安装迅雷,请在本页面点右键,选择“使用迅雷下载全部链接”;^<br^>
    echo   在弹出的“选择要下载的URL”窗口中,勾选“全选”,然后确定^<br^>
    echo   在接下来的“建立新的下载任务”窗口中,“另存名称”选项后点最右侧的倒三角形符号^<br^>
    echo   选择“注释命名”,确定^<br^>
    echo   这样设置之后,下载回来的%%i文件将会以“序号_歌曲名_歌手名.%%i”的格式命名^<br^>
    echo   FlashGet里的操作可以参考以上步骤^<br^>
    echo ====================================================================================^<p^>
    )>%~1\%~1%%i下载链接.html
)

(
echo ^<html^>
echo ^<title^>百度MP3歌曲排行:%~1^<^/title^>
echo ^<style type="text/css"^>
echo ^<!--
echo a:link { text-decoration: none;color: blue}
echo a:active { text-decoration:blink}
echo a:hover { text-decoration:underline;color: red}
echo a:visited { text-decoration: none;color: green}
echo --^>
echo ^<^/style^>
echo ^<body^>
echo ^<b^>“百度MP3歌曲排行:%~1”列表更新时间:%ModifiedTime%^<^/b^>^<br^>
echo ^<font color="red"^>^<b^>注意:以下内容是“%~1”的备用下载地址,仅列出了有效的MP3下载链接^<^/b^>^<^/font^>^<br^>
echo ^<font color="red"^>^<b^>   当“%~1MP3下载链接.html”中某些MP3文件下载失败时,请到本页面选择相应的备用地址进行下载^<^/b^>^<^/font^>^<br^>
echo ^<font color="red"^>^<b^>   请手工选择文件进行单个的下载,若选择批量下载的方式,则会导致同一文件多次下载,并会保存为多个副本^<^/b^>^<^/font^>^<br^>
echo ^<font color="red"^>^<b^>   下载链接有可能失效的MP3文件列表请查看“下载链接可能已经失效的MP3列表.txt”^<^/b^>^<^/font^>^<p^>
echo ====================================================================================^<p^>
)>%~1\%~1MP3备用下载链接.html

(
echo 以下内容为 %ModifiedTime% 更新的“百度MP3歌曲排行:%~1”中下载链接有可能已经失效的mp3文件列表
echo 在本列表中的保存格式为:序号_歌曲名_歌手名.mp3
echo 若您想下载它们,请以相应的关键词在百度MP3网页中搜索有效的下载链接
echo.
)>"%~1\下载链接可能已经失效的mp3列表.txt"

md "%~1\Lrc" 2>nul

(
echo 以下内容为 %ModifiedTime% 更新的“百度MP3歌曲排行:%~1”中未找到下载链接的歌词文件列表
echo 在本列表中的保存格式为:序号_歌曲名.lrc
echo 若您想下载它们,请以相应的关键词在百度MP3网页中搜索有效的下载链接
echo.
)>"%~1\未找下载地址的歌词文件列表.txt"

setlocal enabledelayedexpansion

for /f "delims==" %%i in ('set Url 2^>nul') do set "%%i="
set UrlUseableNum_MP3=0
set UrlUseableNum_URC=0
for %%i in (%~1\xml\*.xml) do (
    for /f "usebackq delims=" %%j in ("%%i") do (
        set "str=%%j"
        set "str=!str:"=!"
        set RunTimes=0
        call :GetUrl %1 Count
        set "UrlUseable="
        set "UrlUseableFirst="
        if !Url_Count! gtr 0 (
            call :GetUrl %1 Encode
            call :GetUrl %1 Decode
            call :GetUrl %1 Lrcid
            call :DownLrc %1 "%%~ni"
            call :GetMp3DownList %1 "%%~ni"
            echo.
        ) else (
            echo %%~ni.mp3>>"%~1\下载链接可能已经失效的mp3列表.txt"
            echo %%~ni.lrc>>"%~1\未找下载地址的歌词文件列表.txt"
        )
    )
)

for %%i in (MP3 LRC) do (
    (
    echo ^<p^>
    echo %~1 下的歌曲共 ^<b^>%SongNum%^<^/b^> 首,有效的%%i下载链接共 ^<b^>!UrlUseableNum_%%i!^<^/b^> 条
    echo ^<^/body^>
    echo ^<^/html^>
    )>>%~1\%~1%%i下载链接.html
)

(
echo ^<^/body^>
echo ^<^/html^>
)>>%~1\%~1mp3备用下载链接.html

endlocal
goto :eof

:GetMp3DownList
:: 功能:获取Mp3的下载链接列表,并下载相应的歌词文件
:: 对当前路径的字符有特殊要求,不能含有\http:\,因为用到了 %%~pi
set /a RunTimes+=1
if %RunTimes% gtr %Url_Count% (
    if not defined UrlUseable (
        echo %~2.mp3>>"%~1\下载链接可能已经失效的mp3列表.txt"
    )
    goto :eof
)
for /f "delims=" %%i in ("%Url_Decode%") do set type=%%~xi
for %%i in (.mp3 .wma) do (
    if /i "%type%"=="%%i" set UrlUseable=true
)
if not defined UrlUseable (
    call :GetUrl %1 Encode
    call :GetUrl %1 Decode
    goto GetMp3DownList
)
for /f "delims=" %%i in ("%Url_Encode%") do set "Url_head=%%~pi"
set "Url_head=%Url_head:*\http:\=%"
set "Url_mp3=%Url_head%%Url_Decode%"
set "Url_mp3=%Url_mp3:\=/%"
if not defined UrlUseableFirst (
    set /a UrlUseableNum_MP3+=1
    (echo ^<a href="http://%Url_mp3%"^>%~2.mp3^<^/a^>^<br^>)>>%~1\%~1mp3下载链接.html
    (echo ^<p^>)>>%~1\%~1mp3备用下载链接.html
) else (
    (echo ^<a href="http://%Url_mp3%"^>%~2.mp3^<^/a^>^<br^>)>>%~1\%~1mp3备用下载链接.html
)
set UrlUseableFirst=no
call :GetUrl %1 Encode
call :GetUrl %1 Decode
goto GetMp3DownList

:DownLrc
:: 功能:下载歌词文件
if %Url_Lrcid% neq 0 (
    set /a Url_lrc=!Url_Lrcid!/100
    set Url_lrc=!Url_lrc!/!Url_Lrcid!.lrc
    set Url_lrc=http://box.zhangmen.baidu.com/bdlrc/!Url_lrc!
    (echo ^<a href="!Url_lrc!"^>%~2.lrc^<^/a^>^<br^>)>>%~1\%~1LRC下载链接.html
    wget -nv -N -O "%~1\lrc\%~2.lrc" !Url_lrc!
    set /a UrlUseableNum_LRC+=1
) else echo %~2.lrc>>"%~1\未找下载地址的歌词文件列表.txt"
goto :eof

:GetUrl
:: 提取<……>和</……>标记对之间的字符串

set "str=!str:*<%2>=!"
for /f "delims=< tokens=1*" %%i in ("%str%") do (
    set "Url_%2=%%i"
    set "str=%%j"
)
goto :eof

:end
title %~1整理完毕
cls
echo.&echo.
echo %~1整理完毕
echo.
goto :eof
榜单分类.ini 中的内容:
引用:
;以分号打头的行为注释内容
;配置文件的格式内容为:编号 分类名称 在百度MP3榜单歌曲排行上对应的首页,三个字段以空格分隔,不能夹带其他字符
;这些百度MP3榜单首页的列表中,必须有歌曲序号、歌曲名及歌手名这三个字段,歌手名可以为空,即网页源文件代码中必须含有“td class="tdb"”、“td class="tdc"”和td class="tdd"这三行内容
;“中文金曲”、“中国民乐”因不满足上述条件而无法正确提取,需单独编写代码
;百度MP3榜单首页:http://list.mp3.baidu.com/index.html

1 新歌TOP100 http://list.mp3.baidu.com/top/top100.html
2 歌曲TOP500 http://list.mp3.baidu.com/top/top500.html
3 日韩流行风 http://list.mp3.baidu.com/top/rihan.html
4 欧美金曲 http://list.mp3.baidu.com/top/oumei.html
5 影视金曲 http://list.mp3.baidu.com/top/movie.html
6 热门对唱 http://list.mp3.baidu.com/top/duichang.html
7 摇滚歌曲榜 http://list.mp3.baidu.com/top/yaogun.html
8 流金岁月 http://list.mp3.baidu.com/top/junlvminge.html

此帖于 2011-04-23 17:00:37 被 namejm 编辑. .
namejm
 
namejm 的头像
超级会员
 
资 料:
注册日期: Apr 2009
帖子: 1,363 声望值: 3
精华: 21,解答: 83
#3 旧 2011-04-23, 16:45:12 默认
namejm 当前离线  

放出整理过程图片。

此帖于 2011-04-23 16:49:34 被 namejm 编辑. .
namejm
 
namejm 的头像
超级会员
 
资 料:
注册日期: Apr 2009
帖子: 1,363 声望值: 3
精华: 21,解答: 83
#4 旧 2011-04-23, 16:51:14 默认
namejm 当前离线  

接上帖,继续贴图。
q4jinpro
 
q4jinpro 的头像
热心会员
 
资 料:
注册日期: Aug 2001
帖子: 2,221 声望值: 5
精华: 0,解答: 3
#5 旧 2011-04-23, 17:20:52 默认
q4jinpro 当前离线  

LZ还是帖出来了?这么长的帖子,可不容易。
jacky365
 
jacky365 的头像
热心会员
 
资 料:
注册日期: Aug 2001
帖子: 5,286 声望值: 7
精华: 3,解答: 54
#6 旧 2011-04-23, 21:35:20 默认
jacky365 当前离线  

顶一下,此贴应设为精品。

有分析,有步骤,是很好的教材,对有心者应该可学到不少东西。
ila
 
ila 的头像
终极会员
 
资 料:
注册日期: Apr 2002
帖子: 10,693 声望值: 7
精华: 1,解答: 12
#7 旧 2011-04-24, 03:27:22 默认
ila 当前离线  

请问能不能下载类似于这样关键词的列表啊
http://mp3.baidu.com/m?tn=baidump3&c...%C9%CB%B8%D0#1


123
namejm
 
namejm 的头像
超级会员
 
资 料:
注册日期: Apr 2009
帖子: 1,363 声望值: 3
精华: 21,解答: 83
#8 旧 2011-04-24, 08:17:48 默认
namejm 当前离线  

一通百通
这个是可以下载的
只是不知道你想通过什么方式列出了这个表
又想下载这个表中的哪些内容
还请写个完整的流程出来
让我明白你的真实意图
fyi151
 
fyi151 的头像
热心会员
 
资 料:
注册日期: Jul 2010
帖子: 8,497 声望值: 8
精华: 0,解答: 19
#9 旧 2011-04-24, 09:52:42 默认
fyi151 当前离线  

等好人打包~
adslyear
 
adslyear 的头像
合作伙伴
 
资 料:
注册日期: Mar 2002
帖子: 4,267 声望值: 9
精华: 0,解答: 9
#10 旧 2011-04-24, 12:50:06 默认
adslyear 当前离线  

谢谢,写的很好,学习了
黄树林
 
黄树林 的头像
热心会员
 
资 料:
注册日期: Jul 2001
帖子: 1,350 声望值: 4
精华: 1,解答: 1
#11 旧 2011-04-25, 08:05:14 默认
黄树林 当前离线  

有一个问题,现在的迅雷7已经不能按注释名下载了,手里又没有别的版本。
首先谢谢楼主的教程,其次还想烦请楼主给一个低版本的迅雷。:blush;


“空气在颤抖,仿佛天空在燃烧。”
Wasser
 
Wasser 的头像
热心会员
 
资 料:
注册日期: May 2002
帖子: 3,718 声望值: 4
精华: 0,解答: 5
#12 旧 2011-04-25, 09:52:23 默认
Wasser 当前离线  

win7 x64
无法获取条目 命令可执行 目录也能建立 html文件中提示获取0条
流浪猫
 
流浪猫 的头像
超级会员
 
资 料:
注册日期: Sep 2002
帖子: 1,071 声望值: 3
精华: 0
#13 旧 2011-04-25, 11:19:05 默认
流浪猫 当前离线  

运行后抓不到下载载接了。


“百度MP3歌曲排行:流金岁月”列表更新时间:
注意:以下内容并非“流金岁月”的全部,仅列出了有效的MP3下载链接
   当本页面中的某些mp3文件下载失败时,请到“流金岁月mp3备用下载链接.html”中选择相应的备用地址进行下载
   下载链接有可能失效的mp3文件列表请查看“下载链接可能已经失效的mp3列表.txt”
批量下载本页面列出的MP3文件的方法(以迅雷5为例,迅雷7不适用):
  若您已经安装迅雷,请在本页面点右键,选择“使用迅雷下载全部链接”;
  在弹出的“选择要下载的URL”窗口中,勾选“全选”,然后确定
  在接下来的“建立新的下载任务”窗口中,“另存名称”选项后点最右侧的倒三角形符号
  选择“注释命名”,确定
  这样设置之后,下载回来的MP3文件将会以“序号_歌曲名_歌手名.MP3”的格式命名
  FlashGet里的操作可以参考以上步骤
====================================================================================


流金岁月 下的歌曲共 首,有效的MP3下载链接共 0 条


是不是百度已经改了。
namejm
 
namejm 的头像
超级会员
 
资 料:
注册日期: Apr 2009
帖子: 1,363 声望值: 3
精华: 21,解答: 83
#14 旧 2011-04-25, 12:45:42 默认
namejm 当前离线  

百度MP3下载链接没有改变
我是在XP_SP3系统上测试的
经过测试,如果wget放在当前目录下的话
会提示缺少几个dll文件
推荐把wget放在c:\windows目录下
下载不到html文件的情况,恐怕和wget所放的位置有关
不妨把wget换个位置
Wasser
 
Wasser 的头像
热心会员
 
资 料:
注册日期: May 2002
帖子: 3,718 声望值: 4
精华: 0,解答: 5
#15 旧 2011-04-25, 14:13:33 默认
Wasser 当前离线  

估计是没安装wget 麻烦lz贴一个wget的附件吧 下载了一个zip包 不知道怎么安装
发表新主题 关闭主题

主题工具

论坛规则  发帖规则
不可以发表主题
不可以回复帖子
不可以上传附件
不可以编辑自己的帖子
论坛启用 vB 代码
版面启用 表情符号
版面启用 [IMG] 代码
版面禁用 HTML 代码


所有时间均为北京时间, 现在的时间是 12:26:31.

本论坛带宽由迅通网络提供
SSL证书由TrustAsia提供

Copyright © 2000 - 2019 ClassiClub Forum All Rights Reserved.
粤ICP备09123456号