有些教学类 epub 电子书会附带音频文件,出于版权考虑,这些音频文件不是直接放在本地,而是存储在出版方服务器上,点击书中的喇叭图标,会跳转至音频对应的真实地址,然后开始播放。这样不够高效。最好把这些超链接对应的音频一次性下载到本地,播放起来就方便多了。
提取epub中的超链接涉及解析epub电子书结构,epub实际上是一种压缩文件,里面通常包含多个xhtml文件,每个xhtml文件对应电子书中的一个章节。利用这个特点,可以先解压epub,然后挨个解析xhtml文件即可。另一种方法是用ebooklib库,可以直接解析epub文件内容。本例即展示如何利用此法解析到一本电子书中所有超链接并下载对应的音频文件。
# Extract hyperlinks in a epub book and download all the audios directed to by the hyperlinks
import re,requests
from urllib.parse import unquote
from ebooklib import epub
def down(url,path):
headers = {
'Accept': '*/*',
'Accept-Language': 'en-US,en;q=0.5',
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36'
}
headers.update({"Referer":url})
try:
resp=requests.get(url,headers=headers)
with open(path,'ab') as f:
f.write(resp.content)
except Exception as e:
print(e)
def parse_epub(path):
links = []
book = epub.read_epub(path)
all_items = book.get_items()
for item in all_items:
if type(item) == epub.EpubHtml:
links.extend(re.findall('http.*mp3',item.get_content().decode()))
links = list(dict.fromkeys(links))
for link in links:
fnam = unquote(link).rsplit('/',1)[-1]
mpath = path.rsplit('\\',1)[0]
fpath = f'{mpath}\{fnam}'
if int(fnam[:3])>0:
print(f'Downloading {fnam}...')
down(link,fpath)
book="my_book_name.epub"
parse_epub(book)
以上就是“Python: 下载 epub 电子书中链接的音频教程”的详细内容,想要了解更多Python教程欢迎持续关注编程学习网。
扫码二维码 获取免费视频学习资料
- 本文固定链接: http://phpxs.com/post/11332/
- 转载请注明:转载必须在正文中标注并保留原文链接
- 扫码: 扫上方二维码获取免费视频资料
查 看2022高级编程视频教程免费获取