AI网络爬虫:用kimi根据RSS批量下载播客音频

部落人有文化 2024-05-17 10:33:18

很多优质的播客想下载到电脑上保存慢慢听,用kimi就可以很方便的批量下载。

在播客上点击subscribe via rss:

打开就是一个rss地址:

里面有播客的标题、摘要和音频下载地址;

在kimi中输入提示词:

你是一个Python编程专家,要完成一个批量下载播客音频的Python脚本,一步一步的思考:

打开网页https://feeds.megaphone.fm/create-like-the-greats

定位所有<item>标签,

在<item>标签中定位<title>标签,提取其文本内容作为播客音频的文件名;

在<item>标签中<enclosure> 标签,提取其url属性作为播客音频的URL;

下载播客音频,保存到E盘文件夹:Create Like the Greats

注意:每一步都要输出信息到屏幕上

多线程下载,以加快下载速度;

显示下载进度条;

Kimi生成Python代码:

import os

import requests

from bs4 import BeautifulSoup

from concurrent.futures import ThreadPoolExecutor

# 定义下载函数

def download_audio(podcast_title, podcast_url, save_path):

try:

local_filename = os.path.join(save_path, podcast_title)

with requests.get(podcast_url, stream=True) as r:

r.raise_for_status() # 抛出HTTPError异常,如果响应状态码不是200

with open(local_filename, 'wb') as f:

for chunk in r.iter_content(chunk_size=1024):

if chunk: # 过滤掉保持连接的chunk

f.write(chunk)

print(f"{podcast_title} 下载完成,保存在 {local_filename}")

except requests.exceptions.HTTPError as e:

print(f"{podcast_title} 下载失败,错误码:{e.response.status_code}")

# 检查保存路径是否存在,如果不存在则创建

save_path = "E:\\Create Like the Greats"

if not os.path.exists(save_path):

os.makedirs(save_path)

# 获取并解析播客Feed

url = "https://feeds.megaphone.fm/create-like-the-greats"

response = requests.get(url)

if response.status_code == 200:

print("网页内容已成功获取。")

soup = BeautifulSoup(response.content, 'html.parser')

items = soup.find_all('item')

print(f"找到 {len(items)} 个播客音频项。")

# 使用线程池下载所有音频

with ThreadPoolExecutor(max_workers=5) as executor: # 可以调整线程数

futures = []

for item in items:

title_tag = item.find('title')

enclosure_tag = item.find('enclosure', attrs={'url': True})

if title_tag and enclosure_tag:

title = title_tag.get_text().strip()

url = enclosure_tag['url']

# 清理标题以创建合法文件名

filename = "".join([c for c in title if c.isalpha() or c.isdigit() or c==' ']).rstrip() + ".mp3"

future = executor.submit(download_audio, filename, url, save_path)

futures.append(future)

print(f"安排下载:{filename}")

else:

print("缺少标题或链接信息,跳过该项。")

# 等待所有下载任务完成

for future in futures:

future.result()

else:

print("无法获取网页内容,错误码:", response.status_code)

print("所有任务完成。")

在vscode中运行代码,很快播客音频就下载完成了:

0 阅读:14

部落人有文化

简介:感谢大家的关注