菜鸟小试沪江网站下载日语听力文章和录音

近日,日语教员在微信中问大家谁能帮她把沪江日语的美文及录音下载下来。
沪江日语页面
登上教员给的网址http://jp.hjenglish.com/new/p423987/

发现,没有可以供点击下载的接口,O(∩_∩)O哈哈~。

在众人起哄声中,为了荣誉为了尊严为了世界和平~呼啦啦~
聊天记录
于是使用python爬虫一试。

用火狐浏览器将页面打开,右键查看元素。

这里写图片描述
我们在元素里面找到了有用的信息

HJPlayer.init("hjptype=song&player=2&playerID=1&bg=0xE9F7FE&leftbg=0x73BE44&lefticon=0xFFFFFF&rightbg=0xFFAA00&rightbghover=0x999999&righticon=0xFFFFFF&righticonhover=0xffffff&text=0x666666&slider=0x666666&track=0xFFFFFF&border=0x666666&loader=0x9FFFB8&soundFile=http://f1.w.hjfile.cn/doc/201210/Mp3ABCut_Output_20121023_15.46.54031082586.mp3&autostart=false&width=290&height=24");

其中里面有这么一句是我们想要的

soundFile=http://f1.w.hjfile.cn/doc/201210/Mp3ABCut_Output_20121023_15.46.54031082586.mp3

新建一个窗口打开这个soundFile=后面的链接,正是日语美文录音

这里写图片描述
接下来我们又在元素中找到了日语美文的中日文标题和中日文文章
这里写图片描述
我们发现日文标题和日文的div class="langs_en"而中文标题和中文译文则是div class="langs_cn"看到这心情是很高兴的,好了,准备工作到这里就完成了。O(∩_∩)O哈哈~
ps:我们这里采用的python环境是eclipse+python2.7.9

我们伪装成浏览器构造了一个请求用来向指定的地址获取网页数据,ps:沪江网站站点不加headers会出现报警信息。

headers = {
           'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'  
    }
req = urllib2.Request(  
        url = 'http://jp.hjenglish.com/new/p423987/', 
        headers = headers  
    )
res = urllib2.urlopen(req)
content= res.read()

在获取到页面数据后,我们用到re模块中的findall函数,用来查找所有在soundFile=之后和&autostart之前的字符串,也就是我们要的http://f1.w.hjfile.cn/doc/201210/Mp3ABCut_Output_20121023_15.46.54031082586.mp3,不得不说,网站源码写得真是很清晰很规律,好了,返回格式是一个字符串列表。
然后在mp3这个字符串列表中使用urllib模块中的urlretrieve函数进行页面mp3格式文件的下载,其中,name为下载文件后的保存名。

mp3 = re.findall(".*soundFile=(.*)&autostart.*",content)
i=1
for x in mp3:
    name = str(i)+".mp3"
    i=i+1
    urllib.urlretrieve(x,name)

运行代码,该页面的所有日语录音都涌入了我们的怀抱
这里写图片描述
O(∩_∩)O哈哈~
然后我们将页面中的中日文标题及课文爬下来。
这里我们用到了第三方BeautifulSoup库,它通过定位HTML标签来格式化和组织复杂的网络信息,用简单易用的Python对象为我们展现XML结构信息,由于BeautiSoup库不是Python标准库,因此需要单独安装。
用以下代码来对页面中所有中日文标题和文章进行爬取。

html = urllib2.urlopen(req)
bsObj = BeautifulSoup(html)
title_jp = bsObj.findAll("div",{"class":"langs_en"})
title_cn = bsObj.findAll("div",{"class":"langs_cn"})

并且构造输出语句,查看是否爬取成功。

for title_jp1 in title_jp:
    print title_jp1.get_text()
for title_cn1 in title_cn:
    print title_cn1.get_text()

这里写图片描述
get it!

这里我想将中日文直接保存为txt文件,却尴尬的遇上了编码问题,搞蒙圈了。
据说Python3可以完美解决。
写到这里,真是困了困了…

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值