找回密码
 FreeOZ用户注册
查看: 2509|回复: 14
打印 上一主题 下一主题

[学习深造] ABC News mp3、txt下载工具

[复制链接]
跳转到指定楼层
1#
发表于 28-6-2013 13:40:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?FreeOZ用户注册

x
本帖最后由 Jay@AU 于 10-12-2013 22:46 编辑

快要登陆了,发现澳音有点不适应,就决定听听ABC News适应适应。 发现里面只能听,不能下,不太方便。 就花了一个多小时搞了个小程序。 共享出来、希望能帮到需要的人。

不过我是用java写的,所以使用的话要保证机器上装了JRE/JDK。

论坛没有附件上传功能,我用网盘共享出来,地址:http://pan.baidu.com/s/1kXXdm

解压后,点击run.bat ,默认下载第二页的列表,因为发现有时第一页MP3放上去了,transcript还没完成。如果要下载其他页, 用文本编辑器打开run.bat改改最后那个数字就可以了,第一页就改成1  

下载完成后,所有文件放在该目录下的temp目录下。

评分

参与人数 6威望 +260 收起 理由
Serin + 50 你太有才了!
yeats_only + 50 你太有才了!
fony + 50 有空把代码也share一下呀~~
godbook + 50 你太有才了!
Jessie_dan + 10 谢谢分享!

查看全部评分

回复  

使用道具 举报

2#
发表于 28-6-2013 14:00:14 | 只看该作者
有心人,赞一个。
回复  

使用道具 举报

3#
发表于 28-6-2013 16:57:21 | 只看该作者
谢谢分享!
请问下,默认下载第二页的列表,是什么意思啊?
回复  

使用道具 举报

4#
 楼主| 发表于 28-6-2013 18:27:05 | 只看该作者
http://www.abc.net.au/news/audio/  是所有的audio列表, 按时间排序,新的在最前面第一页。 你看那个页面下面有页码。 第二页就是说下载第二页里面所有mp3和txt。
回复  

使用道具 举报

5#
发表于 28-6-2013 18:34:54 | 只看该作者
LZ太有心了,刚才用了一下,可以正常下载。赞!!
回复  

使用道具 举报

6#
发表于 28-6-2013 21:21:19 | 只看该作者
本帖最后由 darrenlee 于 28-6-2013 20:31 编辑

楼主想法不错,
bat文件?

给linux下的兄弟的下载文本和音频的脚本,正好我也练习练习bash,都快忘光了.....

用法:
下载当天所有音频和文本到当前目录
bash abc.sh
下载指定日期的所有音频和文本到当前目录
bash abc.sh 2013-06-27

abc.sh
  1. #!/bin/bash

  2. ### Author:darrenlee
  3. ### Date:2013-06-28
  4. ### Dependency:bash,grep,sed,curl

  5. function download {
  6.         local pageurl=$1
  7.         echo "    Grabbing ==> $pageurl"
  8.         local mp3url=`curl $pageurl | grep ".mp3" | cut -d "'" -f 4`
  9.         local txturl=`echo $mp3url | cut -d "/" -f 8 | cut -d "." -f 1`.txt
  10.         curl $pageurl | sed -n "/<div\ class\=\"media-transcript\">/,/<\/div>/p" | sed 's/<p>//g' | sed "s/<\/p>/\n/g" | sed "s/<div\ class\=\"media-transcript\">//g" | sed 's/<\/div>//g' > ./$txturl
  11.         curl -O $mp3url
  12. }

  13. if [ -z "$1" ]; then
  14.         newsdate=`date +%Y-%m-%d`
  15. else
  16.         newsdate=$1
  17. fi
  18. page=1
  19. has=true
  20. start=false
  21. while $has
  22. do
  23.         echo "Grabbing ==> http://www.abc.net.au/news/audio/?page=$page"
  24.         readarray LISTS < <(curl "http://www.abc.net.au/news/audio/?page=$page" | grep "/news/$newsdate")
  25.         page=$((page+1))
  26.         for item in "${LISTS[@]}"
  27.         do
  28.         download "http://www.abc.net.au"`echo $item | cut -d '"' -f 2`               
  29.         done
  30.         if [ ${#LISTS[@]} != 0 ]; then
  31.                 start=true
  32.         else
  33.                 if $start ; then
  34.                         has=false
  35.                 fi
  36.         fi
  37. done
复制代码
回复  

使用道具 举报

7#
 楼主| 发表于 3-7-2013 00:56:59 | 只看该作者
回复  

使用道具 举报

8#
发表于 4-7-2013 11:55:26 | 只看该作者
很好用,谢谢楼主
回复  

使用道具 举报

9#
发表于 9-12-2013 10:43:47 | 只看该作者
好像不能下载mp3了,楼主更新下啊!
回复  

使用道具 举报

10#
发表于 9-12-2013 12:43:55 | 只看该作者
http://www.abc.net.au/am/archives.html?year=2013   这里可以直接下载啊。  
回复  

使用道具 举报

11#
发表于 9-12-2013 16:15:24 | 只看该作者
izhwei 发表于 9-12-2013 12:43
http://www.abc.net.au/am/archives.html?year=2013   这里可以直接下载啊。

谢谢,我试了下,要一个一个点击保存mp3和文字,有没有更方便的批量下载方法?
回复  

使用道具 举报

12#
 楼主| 发表于 10-12-2013 22:47:36 | 只看该作者
cctt126 发表于 9-12-2013 10:43
好像不能下载mp3了,楼主更新下啊!

ABC改版了。 更新了,点击上面链接重新下载。
回复  

使用道具 举报

13#
发表于 10-12-2013 23:51:22 | 只看该作者
技术牛人呀
回复  

使用道具 举报

14#
 楼主| 发表于 12-12-2013 20:52:03 | 只看该作者

其实很简单很简单。 这种枯燥的重复劳动用这种简单的方法也能省点时间和体力了。
回复  

使用道具 举报

15#
发表于 15-12-2013 01:37:28 | 只看该作者
本帖最后由 iamOk 于 15-12-2013 18:02 编辑

挺有意思的,这两天在学python, 也写了个完成同样功能的,装了python的可以直接用来,没有装的可以先装一个python.
  1. #copyright, IamOk@freeOZ
  2. from xml.dom import minidom;
  3. import re;
  4. import urllib2;
  5. import os;
  6. from HTMLParser import HTMLParser
  7. xmlurl="http://www.abc.net.au/news/feed/54536/rss.xml";
  8. prefix="download/";
  9. class MP3Parser(HTMLParser):
  10.         inscript=0;
  11.         scriptname=0;
  12.         def handle_starttag(self, tag, attrs):
  13.                 if(tag=='script'):
  14.                         self.inscript=1;
  15.                 if(        tag=='div'):
  16.                         for name, value in attrs:
  17.                                 if name == 'class' and re.search('media-transcript', value):
  18.                                         self.inscript=3;
  19.         def handle_endtag(self, tag):
  20.                 if(tag=='script'  or tag=='div'):
  21.                         self.inscript=2;

  22.         def handle_data(self, data):
  23.                 if(self.inscript==1):
  24.                         cline=data.split(',');
  25.                         for csource in cline:
  26.                                 mp3=re.search('\.mp3', csource);
  27.                                 if mp3:
  28.                                         tmps= csource.split()[1][1:][:-1];
  29.                                         filename=prefix+tmps.split('/')[-1];
  30.                                         self.scriptname=filename+'.txt';
  31.                                         if os.path.isfile(filename):
  32.                                                 self.scriptname=0;
  33.                                                 break;
  34.                                         else:
  35.                                                 print "downloading "+tmps;
  36.                                                 try:
  37.                                                         mymp3=urllib2.urlopen(tmps);
  38.                                                         mp3file = mymp3.read();
  39.                                                         fo = open(filename, "wb");
  40.                                                         fo.write(mp3file);
  41.                                                         fo.close();
  42.                                                 except ValueError:
  43.                                                         break;
  44.                 if(self.inscript==3 and self.scriptname!=0 ):
  45.                         fs = open(self.scriptname, "a");
  46.                         fs.write(data);
  47.                         fs.close();



  48. # instantiate the parser and fed it some HTML
  49. parser = MP3Parser()
  50. myurl=urllib2.urlopen(xmlurl);
  51. html = myurl.read();
  52. fo = open("result.xml", "w");
  53. fo.write(html);
  54. fo.close();
  55. xmldoc = minidom.parse('result.xml')
  56. if not os.path.exists(prefix):
  57.         os.makedirs(prefix);
  58. for node in xmldoc.getElementsByTagName('link'):
  59.         mylink= node.childNodes[0].nodeValue;
  60.         if(re.findall('[0-9]', mylink)):
  61.                 print("opening "+ mylink);
  62.                 myurl=urllib2.urlopen(mylink);
  63.                 html = myurl.read();
  64.                 parser.feed(html);
  65.                 print("processing next link\r\n");
  66.                
复制代码
回复  

使用道具 举报

您需要登录后才可以回帖 登录 | FreeOZ用户注册

本版积分规则

小黑屋|手机版|Archiver|FreeOZ论坛

GMT+11, 14-11-2025 23:46 , Processed in 0.021255 second(s), 31 queries , Gzip On, Redis On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表