自动下载百度新歌的脚本

sh/bash/dash/ksh/zsh等Shell脚本
头像
Tenyears
帖子: 2245
注册时间: 2005-06-30 15:46
来自: 成都

#61

帖子 Tenyears » 2006-11-03 22:04

bones7456 写了:哈哈,这个脚本已经被我改过了,又可以下载了,详情请见:trackback.php?e=1625
看不到阿,麻烦老兄贴出来一下
Humanity to others // 己所不欲,勿施与人
Laptop: ThinkPad X220 --- Win7 Home / Ubuntu 12.04
Desktop: Win7/Ubuntu 12.04
Server: Ubuntu12.04
头像
爱国者黑客
帖子: 608
注册时间: 2006-10-01 14:34

#62

帖子 爱国者黑客 » 2006-11-05 16:41

一楼的是修改了BUG的吗?
头像
爱国者黑客
帖子: 608
注册时间: 2006-10-01 14:34

#63

帖子 爱国者黑客 » 2006-11-05 17:02

ls@ubuntu:~/Desktop$ sudo sh s下载歌
开始下载百度最新100首歌曲列表
--17:04:26-- http://list.mp3.baidu.com/list/newhits.html
=> `/tmp/root/mp3.html'
正在解析主机 list.mp3.baidu.com... 220.181.18.160
正在连接 list.mp3.baidu.com|220.181.18.160|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度: 51,386 (50K) [text/html]

100%[====================================>] 51,386 163.99K/s

17:04:27 (163.27 KB/s) - `/tmp/root/mp3.html' saved [51386/51386]

下载百度最新100首歌曲列表完成。
s下载歌: 185: cannot open =line: No such file
s下载歌: 185: i: not found
ls@ubuntu:~/Desktop$
头像
爱国者黑客
帖子: 608
注册时间: 2006-10-01 14:34

#64

帖子 爱国者黑客 » 2006-11-05 17:37

下载完毕 --17:40:02--
下载了:0 字节,共 0 个文件
获取 放飞美丽-刘亦菲) 下载列表完成。
sort: Warning: "+number" syntax is deprecated, please use "-k number"
发现 0 个名为 放飞美丽-刘亦菲).mp3 下载地址。
发现 0 个名为 放飞美丽-刘亦菲).wma 下载地址。
下载 放飞美丽-刘亦菲) 失败
开始通过 <td width=17% height=28 bgcolor=#FFFFFF class=border>http://mp3.baidu.com/m?tn=baidump3&ct=1 ... E9+183Club 下载 再一遍-183Club)
--17:40:02-- http://%3Ctd/
=> `/tmp/ls/down.html'
正在解析主机 <td... 失败:Name or service not known。
--17:40:02-- http://width=17%25/
=> `/tmp/ls/down.html'
正在解析主机 width=17%... 失败:Name or service not known。
--17:40:02-- http://height=28/
=> `/tmp/ls/down.html'
正在解析主机 height=28... 失败:Name or service not known。
--17:40:02-- http://bgcolor=/
=> `/tmp/ls/down.html'
正在解析主机 bgcolor=... 失败:Name or service not known。
class=border>http://mp3.baidu.com/m?tn=baidump3&ct=1 ... E9+183Club: 不支持的主题.

下载完毕 --17:40:02--
下载了:0 字节,共 0 个文件
获取 再一遍-183Club) 下载列表完成。
sort: Warning: "+number" syntax is deprecated, please use "-k number"
发现 0 个名为 再一遍-183Club).mp3 下载地址。
发现 0 个名为 再一遍-183Club).wma 下载地址。
下载 再一遍-183Club) 失败
开始通过 <td width=17% bgcolor=#FFFFFF class=border>http://mp3.baidu.com/m?tn=baidump3&ct=1 ... C%D5%86%B4 下载 太美丽-陶喆)
--17:40:02-- http://%3Ctd/
=> `/tmp/ls/down.html'
正在解析主机 <td... 失败:Name or service not known。
--17:40:02-- http://width=17%25/
=> `/tmp/ls/down.html'
正在解析主机 width=17%... 失败:Name or service not known。
--17:40:07-- http://bgcolor=/
=> `/tmp/ls/down.html'
正在解析主机 bgcolor=... 失败:Name or service not known。
class=border>http://mp3.baidu.com/m?tn=baidump3&ct=1 ... C%D5%86%B4: 不支持的主题.

下载完毕 --17:40:07--
下载了:0 字节,共 0 个文件
获取 太美丽-陶喆) 下载列表完成。
sort: Warning: "+number" syntax is deprecated, please use "-k number"
头像
爱国者黑客
帖子: 608
注册时间: 2006-10-01 14:34

#65

帖子 爱国者黑客 » 2006-11-05 17:43

现在失效了?
头像
bones7456
帖子: 8495
注册时间: 2006-04-12 20:05
来自: 杭州
联系:

#66

帖子 bones7456 » 2006-11-07 12:03

Tenyears 写了:
bones7456 写了:哈哈,这个脚本已经被我改过了,又可以下载了,详情请见:trackback.php?e=1625
看不到阿,麻烦老兄贴出来一下
好的,原先看到代码太长了,所以才没贴。

代码: 全选

#!/bin/bash 
#Copyright (c) 2005 ubuntu.org.cn 
#License: GPLv2 
#原脚本见http://forum.ubuntu.org.cn/viewtopic.php?t=2391&sid=910a60e55961be5f927b82595c2ddc29 
# 
#由于baidu的问题,导致原脚本不能正确下载,所以由 bones7456 再次修改,欢迎大家使用。 
#wget太慢了。脚本默认使用axel多线程下载工具进行下载,如果没有axel,可以执行sudo apt-get install axel进行安装,或者把含有“axel”的两行注释,用下面“wget”的两行代替即可。 

#mp3的地址 
SOURCE="http://list.mp3.baidu.com/list/newhits.html" 

#保存mp3的目录 
SAVE="${HOME}/baidump3" 

#下载重试次数 
TRYCOUNT=2 

#临时目录 
TMP="/tmp/${USER}" 

#创建下载目录 
if [ ! -d "${SAVE}" ];then 
    mkdir -p "${SAVE}" 
fi 

#创建临时下载目录 
if [ ! -d "${TMP}" ];then 
    mkdir -p "${TMP}" 
fi 

echo "开始下载百度最新100首歌曲列表" 
wget -O ${TMP}/mp3.html ${SOURCE} 
echo "下载百度最新100首歌曲列表完成。" 

#转换网页编码 
iconv -f gbk -t utf8 ${TMP}/mp3.html |\ 

grep "<a href="http://mp3.baidu.com/m" |\ 

#将mp3list.txt所有开头的空格去掉 
sed -e 's/ *//' |\ 

#将mp3list.txt所有开头的tab去掉 
sed -e 's/\t*//' |\ 

#将mp3list.txt所有全角空格去掉 
sed -e 's/ //g' |\ 

#将所有的回车符去掉 
sed ':a;N;$!ba;s/\n/,/g' |\ 

#在td>,后面加上回车符,一行表示一个mp3文件。 
sed -e 's/,<td/\n<td/g' |\ 
sed -e 's/td>,/td>\n/g' |\ 

#删除<td width="30%"> <td> </td> <td...FFFFFF"> <p> </p> 
sed -e 's/<td width="30%">//g' |\ 
sed -e 's/<td>//g' |\ 
sed -e 's/<\/td>//g' |\ 
sed -e 's/<p>//g' |\ 
sed -e 's/<\/p>//g' |\ 
sed -e 's/<td.*"border">//g' |\ 

#删除</a>..."_blank"> 
sed -e 's/<\/a>.*_blank">/-/g' |\ 
sed -e 's/<\/a>.*_blank>/-/g' |\ 
#删除) 
sed -e 's/<\/a>)/<\/a>/g' |\ 

#删除& 
sed -e 's/\&amp\;/\//g' >${TMP}/mp3list.txt 

#得到:<a href="http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=2&word=Baby%20Baby%20tell%20me%20%CD%F5%D0%C4%C1%E8" target="_blank">Baby ,Baby tell me-王心凌</a> 

#取得行号,循环 
line=$(awk 'END{print NR}' ${TMP}/mp3list.txt) 
i=1; 
while((i<=line));do 
   downed=0; 
   mpline=`awk 'NR=='"$i"'' ${TMP}/mp3list.txt` 
   url=`echo $mpline | sed -e 's/<a href="//g' | sed 's/\ target.*//g' | sed 's/"//g' | cat` 
   name=`echo $mpline | sed -e 's/.*_blank">//g' | sed -e 's/.*_blank>//g' |\ 
        sed -e 's/<\/a>//g' | sed -e 's/\//-/g' | sed -e 's/:/-/g'  | sed -e 's/"/'\''/g'  | cat` 
  
   #检查是否已经下载过这首歌,如果下载过,放弃 
   if [ -e "${SAVE}/${name}.mp3" ] || [ -e "${SAVE}/${name}.wma" ]; then 
      echo -e "\e[1;6m\e[1;31m发现 ${name} 下载过,忽略,继续下一首。\e[1;6m\e[00m" 
      ((i++)) 
      continue; 
   fi 

   echo "开始通过 $url 下载 $name"; 
   wget -O ${TMP}/down.html $url 
   echo "获取 $name 下载列表完成。"; 

   #down.txt为有效的下载地址 
   iconv -f gbk -t utf8 -c ${TMP}/down.html | grep "onclick="return ow(this)"" |\ 
   sed -e 's/.*<a href="//g' | sed -e 's/" target="_blank".*//g' > ${TMP}/down.txt 

   #size.txt为有效的下载文件大小 
   iconv -f gbk -t utf8 -c ${TMP}/down.html | grep "M<\/td>" |\ 
   sed -e 's/<td>//g' | sed -e 's/ M<\/td>//g' > ${TMP}/size.txt 

   #down.txt与size.txt合并而在的down_size.txt文件中字段之间以"`"作为分隔符 
   paste -d '`' ${TMP}/down.txt ${TMP}/size.txt > ${TMP}/down_size.txt 

   #排序 
   sort "+1nr" ${TMP}/down_size.txt > ${TMP}/down_size_sort.txt 

   #去掉后面的尺寸 
   sed 's/`.*$//' ${TMP}/down_size_sort.txt > ${TMP}/temp.txt 
    
   ##### 析取出mp3 的下载地址或 wma的下载地址 ############## 
   grep -i "word=mp3" ${TMP}/temp.txt > ${TMP}/down_mp3.txt 
   grep -i "word=wma" ${TMP}/temp.txt > ${TMP}/down_wma.txt 

   downline_mp3=$(awk 'END{print NR}' ${TMP}/down_mp3.txt); 
   downline_wma=$(awk 'END{print NR}' ${TMP}/down_wma.txt); 
   echo -e "\e[1;6m\e[1;31m发现 ${downline_mp3} 个名为 ${name}.mp3 下载地址。\e[1;6m\e[00m" 
   echo -e "\e[1;6m\e[1;31m发现 ${downline_wma} 个名为 ${name}.wma 下载地址。\e[1;6m\e[00m" 
   # 初始化计数器 
   j=1; 
   # 优先下载mp3格式的歌曲 
   while((j<=downline_mp3)); do 
      mp3=`awk 'NR=='"$j"'' ${TMP}/down_mp3.txt | sed -e 's/ /\\ /g'` 
      echo -e "\e[1;6m\e[1;31m正在下载${name}.mp3\e[1;6m\e[00m" 
      #echo -e "\e[1;6m\e[1;31m中转页面地址为${mp3}\e[1;6m\e[00m" 
      wget -O "${TMP}/transit.html" "$mp3" 
      realURL=`cat ${TMP}/transit.html | grep "<li class="li" style="margin-right:10px;">" | sed 's/.*href="//' | sed 's/" target="_blank">.*//'` 
      #echo -e "\e[1;6m\e[1;31m真实下载地址为${realURL}\e[1;6m\e[00m" 

     axel -n 7 -a -o "${TMP}/${name}.mp3" "${realURL}" 
     #wget太慢了。但是如果没有安装axel,可以把上面一行注释掉,用下面一行代替 
      #wget -c --tries=$TRYCOUNT $realURL -O "${TMP}/${name}.mp3" 
      if [ "$?" = 0 ]; then 
         if [ `file -ib "${TMP}/${name}.mp3" | sed -e 's/\/.*//g'` = "audio" ]; then 
            mv "${TMP}/${name}.mp3" "${SAVE}/${name}.mp3" 
            downed=1; 
            break; 
         else 
            echo -e "\e[1;6m\e[1;31m下载 ${name}.mp3 文件无效,正在删除重新下载\e[1;6m\e[00m" 
            rm "${TMP}/${name}.mp3"; 
            ((j++))    
         fi 
      else 
         echo -e "\e[1;6m\e[1;31m下载 ${name}.mp3 文件无效,正在删除重新下载\e[1;6m\e[00m" 
         rm "${TMP}/${name}.mp3"; 
         ((j++)) 
      fi 
   done 

   #如果下载成功继续下其余的歌 
   #continue用于跳过循环体中的后续命令 
   if [ "$downed" = 1 ] ; then 
      ((i++)) 
      echo -e "\e[1;7m\e[1;41m下载 $name 成功\e[1;7m\e[00m" 
      continue; 
   fi 

   # 如果没有mp3格式的则下载wma格式的歌 
   j=1; 
   while((j<=downline_wma)); do 
      wma=`awk 'NR=='"$j"'' ${TMP}/down_wma.txt` 
      echo -e "\e[1;6m\e[1;31m正在下载${name}.wma\e[1;6m\e[00m" 

      #echo -e "\e[1;6m\e[1;31m中转页面地址为${mp3}\e[1;6m\e[00m" 
      wget -O "${TMP}/transit.html" "$wma" 
      realURL=`cat ${TMP}/transit.html | grep "<li class="li" style="margin-right:10px;">" | sed 's/.*href="//' | sed 's/" target="_blank">.*//'` 
      #echo -e "\e[1;6m\e[1;31m真实下载地址为${realURL}\e[1;6m\e[00m" 

     axel -n 7 -a -o "${TMP}/${name}.wma" "${realURL}" 
     #wget太慢了。但是如果没有安装axel,可以把上面一行注释掉,用下面一行代替 
      #wget -c --tries=$TRYCOUNT $realURL -O "${TMP}/${name}.wma3" 
      if [ "$?" = 0 ]; then 
         if [ `file -ib "${TMP}/${name}.wma" | sed -e 's/\/.*//g'` = "application" ]; then 
            mv "${TMP}/${name}.wma" "${SAVE}/${name}.wma" 
            downed=1; 
            break; 
         else 
            echo -e "\e[1;6m\e[1;31m下载 ${name}.wma 文件无效,正在删除重新下载\e[1;6m\e[00m" 
            rm "${TMP}/${name}.wma"; 
            ((j++))    
         fi 
      else 
          echo -e "\e[1;6m\e[1;31m下载 ${name}.wma 文件无效,正在删除重新下载\e[1;6m\e[00m" 
          rm "${TMP}/${name}.wma"; 
          ((j++)) 
      fi 
   done 

   ((i++)) 
   if [ "$downed" = 1 ] ; then 
      echo -e "\e[1;7m\e[1;41m下载 $name 成功\e[1;7m\e[00m" 
   else 
      echo -e "\e[1;7m\e[1;41m下载 $name 失败\e[1;7m\e[00m" 
   fi 
done 
rm -fr ${TMP} 
exit 0
头像
Tenyears
帖子: 2245
注册时间: 2005-06-30 15:46
来自: 成都

#67

帖子 Tenyears » 2006-11-07 15:55

代码: 全选

开始下载百度最新100首歌曲列表
--15:49:17--  http://list.mp3.baidu.com/list/newhits.html
           => `/tmp/zhong/mp3.html'
正在解析主机 list.mp3.baidu.com... 220.181.18.160
正在连接 list.mp3.baidu.com|220.181.18.160|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度: 51,386 (50K) [text/html]

100%[=============================================================================================>] 51,386        --.--K/s             

15:49:18 (455.63 KB/s) - `/tmp/zhong/mp3.html' saved [51386/51386]

下载百度最新100首歌曲列表完成。
baidump3.sh: 198: cannot open =line: No such file
baidump3.sh: 198: i: not found
试用发现这个问题。我试着逐步运行脚本,不进入循环时,只执行i=1,成功。

麻烦兄台看看。
Humanity to others // 己所不欲,勿施与人
Laptop: ThinkPad X220 --- Win7 Home / Ubuntu 12.04
Desktop: Win7/Ubuntu 12.04
Server: Ubuntu12.04
头像
bones7456
帖子: 8495
注册时间: 2006-04-12 20:05
来自: 杭州
联系:

#68

帖子 bones7456 » 2006-11-07 23:09

Tenyears 写了:

代码: 全选

开始下载百度最新100首歌曲列表
--15:49:17--  http://list.mp3.baidu.com/list/newhits.html
           => `/tmp/zhong/mp3.html'
正在解析主机 list.mp3.baidu.com... 220.181.18.160
正在连接 list.mp3.baidu.com|220.181.18.160|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度: 51,386 (50K) [text/html]

100%[=============================================================================================>] 51,386        --.--K/s             

15:49:18 (455.63 KB/s) - `/tmp/zhong/mp3.html' saved [51386/51386]

下载百度最新100首歌曲列表完成。
baidump3.sh: 198: cannot open =line: No such file
baidump3.sh: 198: i: not found
试用发现这个问题。我试着逐步运行脚本,不进入循环时,只执行i=1,成功。

麻烦兄台看看。
注意看脚本前面的提示,你有没有装axel?

代码: 全选

wget太慢了。脚本默认使用axel多线程下载工具进行下载,如果没有axel,可以执行sudo apt-get install axel进行安装,或者把含有“axel”的两行注释,用下面“wget”的两行代替即可。 
[/code]
头像
Tenyears
帖子: 2245
注册时间: 2005-06-30 15:46
来自: 成都

#69

帖子 Tenyears » 2006-11-08 8:52

装了axel。而且不运行脚本,只是把里面命令一步步执行,不进入第一个循环,只让i=1,也就是只下一首歌时,能成功。
Humanity to others // 己所不欲,勿施与人
Laptop: ThinkPad X220 --- Win7 Home / Ubuntu 12.04
Desktop: Win7/Ubuntu 12.04
Server: Ubuntu12.04
头像
爱国者黑客
帖子: 608
注册时间: 2006-10-01 14:34

#70

帖子 爱国者黑客 » 2006-11-10 13:33

代码: 全选

ls@ubuntu:~/Desktop$ sudo ./下载歌
sudo: ./下载歌: command not found
ls@ubuntu:~/Desktop$ sh 下载歌
\u5f00\u59cb\u4e0b\u8f7d\u767e\u5ea6\u6700\u65b0100\u9996\u6b4c\u66f2\u5217\u8868
--13:36:49--  http://list.mp3.baidu.com/list/newhits.html
           => `/tmp/ls/mp3.html'
正在解析主机 list.mp3.baidu.com... 220.181.18.160
正在连接 list.mp3.baidu.com|220.181.18.160|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度: 51,513 (50K) [text/html]

100%[====================================>] 51,513       164.40K/s             

13:36:50 (163.80 KB/s) - `/tmp/ls/mp3.html' saved [51513/51513]

\u4e0b\u8f7d\u767e\u5ea6\u6700\u65b0100\u9996\u6b4c\u66f2\u5217\u8868\u5b8c\u6210\u3002
下载歌: 197: cannot open =line: No such file
下载歌: 197: i: not found
ls@ubuntu:~/Desktop$ 

装了axel还是这样!
linqiangisgood
帖子: 65
注册时间: 2006-07-29 14:57

#71

帖子 linqiangisgood » 2006-11-15 10:58

我也是这样的情况
应该是失效了吧!
linqiangisgood
帖子: 65
注册时间: 2006-07-29 14:57

可以了,哈哈!!!!!!!!!!!!!

#72

帖子 linqiangisgood » 2006-11-15 11:01

发现双击直接运行就可以了,
不知道这个命令行直接运行有水木不同
头像
bones7456
帖子: 8495
注册时间: 2006-04-12 20:05
来自: 杭州
联系:

怪了,我这里可以阿!

#73

帖子 bones7456 » 2006-11-19 17:05

怪了,我这里一直都可以用阿!我传个我一直在用的上来试试。没有装axel的还是要自己处理一下!
附件
dlmp3.tar.gz
(2.63 KiB) 已下载 165 次
yumm_007
帖子: 16
注册时间: 2005-09-22 21:28

Re: 怪了,我这里可以阿!

#74

帖子 yumm_007 » 2006-11-21 23:30

bones7456 写了:怪了,我这里一直都可以用阿!我传个我一直在用的上来试试。没有装axel的还是要自己处理一下!
你传得在哪里呀?

现在知道了,原来是因为没有登录看不到附件
linhanwen
帖子: 51
注册时间: 2006-11-13 23:13

#75

帖子 linhanwen » 2006-11-24 13:52

做好了脚 本为什么不打包上传呢!!!

我是新手,不懂得怎么打包?
回复