python - 从网页下载 mp3 文件
问题描述
此链接包括一些 mp3 文件,这些文件是巴拉克奥巴马的演讲。我想把这些音频文件下载下来,但是我得把每个mp3文件都点进去一个一个下载,比较繁琐。是否可以使用 Python 做到这一点?
解决方案
您可以使用https://pypi.org/project/wget/下载网页或 mp3 等文件
然后解析超链接的 html 内容,检索超链接,然后 wget 该链接。
这可能包括通过检查您发布的网页浏览器上的元素进行的大量解析。
这就是你要找的东西,我使用了 python2.7 和 shell 以便于使用。用于 linux 的 Linux wget 显示“错误 403:禁止”,但 python wget 工作。
>>> # download the webpage
>>> import wget
>>> file = wget.download("https://www.americanrhetoric.com/barackobamaspeeches.htm")
100% [............................................................................] 522790 / 522790>>>
>>> file
u'barackobamaspeeches.htm'
>>>
使用 grep 和 awk 解析下载的文件以从中提取链接。如果您不了解 grep 和 awk,请阅读相关内容。
$ ls
barackobamaspeeches.htm
$ grep "<a href" barackobamaspeeches.htm | grep mp3 | awk -F \" '{print $2}' > mp3_links
$ ls
barackobamaspeeches.htm mp3_links
现在链接可用,阅读它们并使用 wget 下载。
>>> # Read links from file in a list
>>> fd = open("mp3_links", "r")
>>> links = fd.read().splitlines()
>>> fd.close()
>>>
>>> # Create links for download by prepending base url
>>> base_link = 'https://www.americanrhetoric.com/'
>>> for link in links:
>>> print(base_link + link)
>>>
>>> # replace print with wget.download(base_link + link)
我已经针对单个链接对其进行了测试,请尝试并相应地调整代码
推荐阅读
- java - Spark 流在添加 JsonArray 时抛出 java.util.ConcurrentModificationException
- c# - 为什么 twilio 无法从收集命令中调用操作 url?
- node.js - 如何使用 node.js lib 更新 elasticsearch 中的项目?
- react-native - redux-persist 是否在应用更新之间持久化/保存数据?
- sql - 如何根据条件设置每行的布尔值
- teradata - 共享数据库和“用户引用的所有者没有 EXECUTE PROCEDURE 访问权限”过程
- asp.net-core - Asp.Net Core – Kestrel – 端口共享 – 替代
- r - 如何更改数字标签的颜色标签?
- java - 以编程方式在 h2 数据库中保存或更新时编写 sql 插入和更新查询
- reactjs - 在反应中无法通过 tagName app.js 检测链接