批量下载和改名21世纪英文报学生周报听力
如何找到音频
建议使用 google chrome浏览器。
https://www.i21st.cn/ 导航横栏–报纸听力–初中–初二,以初二为例,
https://paper.i21st.cn/audio_21je2_1.html
打开一篇文章的链接,比如
https://paper.i21st.cn/story/162390.html
右键–源码,可以找到
audio id=‘audio’ src=‘https://cdn.21elt.com/paper/21je2/21sp2_800/21je2_800_162390_1.mp3’ preload=‘auto’ device=‘other’ WXAgent=‘0’> </audio
通过迅雷可以下载。
痛点
(1)通过微信公众号听,播放器无法准确定位和前后拖动。所以最好下载后,通过其它播放器听。
(2)每个音频很短,而人工下载超过100个音频,过于浪费时间。
(3)每个音频通过数字命名,无法对应报纸的文章,而人工改名又是一大笔时间开销。
python批量下载和改名
import requests
from bs4 import BeautifulSoup
from time import sleep
import os
from win32com.client import Dispatch
Headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'
}
def get_url(url):
wd_data = requests.get(url,headers=Headers)
soup = BeautifulSoup(wd_data.text,'html.parser')
return soup
def get_mp3(url):
soup = get_url(url)
audios = soup.select('audio')
mp3 = ""
for audio in audios:
mp3 = mp3 + str(audio['src'])
return mp3
def get_links(url):
soup1 = get_url(url)
#获取链接
links = soup1.select('a')
audios = []
titles = []
for alink in links:
if 'href' in alink.attrs:
url2 = alink['href']
title = alink.get_text()
if(url2[:7] == '/story/'):
url22 = 'https://paper.i21st.cn' + url2
audios.append(get_mp3(url22))
titles.append(title)
o = Dispatch("ThunderAgent.Agent64.1")
for onemp3,onetitle in zip(audios,titles):
mp3name = os.path.basename(os.path.dirname(onemp3)) + "_" +onetitle + ".mp3"
print(str(onemp3)+" "+str(mp3name))
o.AddTask(str(onemp3), str(mp3name))
o.CommitTasks()
if __name__ == '__main__':
urls = ['https://paper.i21st.cn/audio_21je2_{}.html'.format(number) for number in range(3,5)]
for url in urls:
get_links(url)
sleep(2)
功能分析:
get_url利用requests的网页获取功能,自动遍历每个链接。
get_mp3,在打开独立文章的网页后,通过BS4,直接找到mp3链接。
get_links有三个功能,1遍历导航页,2自动打开迅雷,3为mp3改名,几乎没有人工干预,非常节省时间。
只需要修改urls = …range(3,5)中的数字,根据自己所需来下载哪个导航页。