一个Python爬虫使用实例:主要用于下载指定的剧集音频。分别从网页和json文件中获取剧集的title和剧集中所存在音频的id,调用you-get,最后自动重命名下载文件夹为剧集名title。
目标网址:
https://www.missevan.com/mdrama/×××××
其中×××××为drama的id,例如28021
- 从getdrama的json文件中获取drama列表中的id和name
- 用you-get获取音乐【
1.使用pyautogui调用you-get,2. 使用 os.system() 直接调用 you-get 命令行工具】 - drama文件夹自动重命名为剧集名
- 下载多个drama
一、获取资源
首先明确需求,需要获取音频的id和name分别作为data和title,查看源码,发现看不到:
可以从getdrama的json文件中获取id和name(不,用you-get的话只需要id)。
以28021为例,0-276,共277个music
小细节:听剧的时候一般是不会出现drama的,他一般是出现sound/player,点大标题可以跳转到drama,或者去源码查看(关于url)
二、发送请求
获取json文件
json_url = f'https://www.missevan.com/dramaapi/getdrama?drama_id={
drama_id}'
# 将获取的 JSON 数据写入文件
with open('getdrama.json', 'w', encoding='utf-8') as f:
f.write(response.text)
读取json文件
# 读取 getdrama.json 文件
with open('getdrama.json', 'r', encoding='utf-8') as f:
content = f.read()
因为用的是you-get,需要提前切换到西文状态下,而文件夹名可能含有中文字符,所以在download之后才重命名为title。
# 下载音频文件
download_dir = 'D:/drama1/'
if not os.path.exists(download_dir):
os.mkdir(download_dir)
(省略部分代码....)
download()
os.rename(download_dir, f'D:/{
title}/')
三、数据解析
获取drama的id
drama_id = re.search(r'/mdrama/(\d+)', url).group(1) # 提取 drama_id
获取drama的名称:
title = selector.css('.title-content::text').get().replace(' ','').replace('\n','')
获取drama中音频的id
# 匹配包含 "id" 和 "sound_id" 的 JSON 对象
pattern = r'\{"id":.*?\}' # 正则表达式匹配模式
matches = re.findall(pattern, content)
# 提取匹配的 JSON 对象中的所需字段
results = []
for match in matches:
try:
data_dict = json.loads(match)
sound_id = data_dict.get("sound_id")
if sound_id:
results.append({
"name": data_dict.get("name"), "sound_id": sound_id})
except json.JSONDecodeError:
continue # 忽略 JSON 解码错误
# 将结果列表转换为 DataFrame
df = pd.DataFrame(results)
四、保存数据
you-get -o {
download_dir} {
url}
五、代码实现
1/ 单个剧集
单个drama可以自动改文件名 ,drama列表暂时不能
# 单个剧集mdrama 下载后自动改文件名
import os
import re
import json