Python爬取某站下载MP3音频,解决非VIP烦恼

查看 86|回复 9
作者:liulu1550   
[color=]此源码仅供学习交流使用
源码已在本人博客记录
https://www.wouldmissyou.com
代码随便写的,大神勿喷!
安装依赖:
pip install beautifulsoup4 requests tqdm tabulate
截图:


Xnip2023-04-18_10-52-18.jpg (187.74 KB, 下载次数: 0)
下载附件
2023-4-18 10:52 上传

源码:
[Python] 纯文本查看 复制代码
import re
import requests
from bs4 import BeautifulSoup
from tabulate import tabulate
from tqdm import tqdm
def save_file(file_path, file_title, file, file_pbar):
    """
    保存文件
    :param file_path: 保存文件的路径
    :param file_title: 保存文件的名称
    :return:
    """
    with open(file_path, mode='wb') as f:
        for file_chunk in file.iter_content(1024 * 512):
            f.write(file_chunk)
            file_pbar.set_description(f'正在下载{file_title}音频中。。。')
            file_pbar.update(1024 * 512)
        file_pbar.set_description(f"{file_title}下载完成")
        file_pbar.close()
def main(input_name):
    """
    :param input_name: 输入的字符:歌曲名称或歌手名
    :return:
    """
    if not input_name:
        return
    headers = {
        "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36 Edg/112.0.1722.46"
    }
    # 请求链接
    base_url = "https://www.gequbao.com"
    # 请求参数
    url = "%s/s/%s" % (base_url, input_name)
    response = requests.get(url=url, headers=headers)
    if response.status_code != 200:
        print("网络请求失败!请稍后重试!")
        return
    pattern = r'
(.*?)
'  # 匹配所有的 HTML 标签
    html_list = re.findall(pattern, response.text, re.DOTALL)
    if not html_list:
        print("解析失败,请重试!")
        return
    # 使用Beautiful Soup解析HTML
    soup = BeautifulSoup(html_list[0], 'html.parser')
    # 提取歌名、歌手和链接,并添加序号
    data = []
    # 保存另一个文件,方便下载
    json_data = []
    for idx, row in enumerate(soup.find_all('tr'), start=1):
        cells = row.find_all('td')
        if len(cells) == 3:
            song_name = cells[0].text.strip()
            artist = cells[1].text.strip()
            link = cells[0].find('a')['href']
            data.append({'序号': idx - 1, '歌名': song_name, '歌手': artist, '链接': link})  # idx-1 是为了让序号从1开始
            json_data.append({"idx": idx - 1, "song_name": song_name, "artist": "artist", "link": link})
    if not json_data:
        print("未找到此歌曲或歌手的相关信息")
        return
    # 打印JSON数据的表格形式,设置表格格式为grid,并调整数字和字符串对齐方式
    print(tabulate(data, headers='keys', tablefmt='grid', numalign='center', stralign='left'))
    while True:
        download_num = str(input("请输入要下载歌曲的序号(输入'0'则下载全部):"))
        if int(download_num) > len(json_data) or int(download_num)

链接, 序号

yzmb8456   

感谢分享,很好用
will52089   

感谢分享
crary06   

666,来学习一下
lcoolgirl   

感谢分享,十分好用
ggDarling   

小站用用没啥问题,还是相当不错的!
Klock0828   

感谢分享
wowang   

感谢分享,好用的哦
onluinyc   

学习一下
dreamofyou   

膜拜大神,学习一下
您需要登录后才可以回帖 登录 | 立即注册

返回顶部