吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4951|回复: 97
收起左侧

[Python 原创] 歌曲爬取脚本

  [复制链接]
.Net_破解 发表于 2023-12-1 11:40
本帖最后由 .Net_破解 于 2023-12-1 11:42 编辑

注意:请勿用于商业用途,侵权请联系我删除,仅供学习交流使用

[Python] 纯文本查看 复制代码
import re
import os
import glob
import time
import json
import requests
from lxml import html
from urllib.request import quote

#这里是通过脚本导出的歌单列表
song = "石梅 - 错过的情人\n孙子涵 - 全世界宣布爱你\n张韶涵 - 看得最远的地方\n张韶涵 - 遗失的美好\n刘惜君 - 我很快乐\n牛奶咖啡 - 越长大越孤单\n张韶涵 - 亲爱的,那不是爱情\n王心凌 - 第一次爱的人\n弦子 - 醉清风\n程响 - 新娘不是我\n金莎 - 星月神话\n刘若英 - 后来\nSweety - 樱花草\n刘若英 - 当爱在靠近\n林忆莲 - 至少还有你\n六哲 - 我好喜欢你\n孙燕姿 - 开始懂了\n孙楠 - 只要有你\nCéline Dion - My Heart Will Go On\n山野(李昊瀚) - 很很很爱你\n范玮琪 - 最重要的决定\n弹棉花的小花 - 顿啦 爱你 (小花版)\n阿YueYue - 沈园外\nen - 其实都没有\n崔伟立 - 为你祈祷\n憨憨的橙子 - 闺蜜的话\n柯柯柯啊 - 姑娘别哭泣\n向思思 - 总会有人\n崔子格 - 卜卦\n侯泽润 - 一句先苦后甜\n周林枫 - 化作晚风拥抱你\n贝乐虎 - 勇气大爆发\n张茜 - 爱似水仙\n陈奕迅 - 孤勇者\n白小白 - 往后余生只爱你\n王忻辰 - 时间幻灭\n山野(李昊瀚) - 如果爱能早些说出来\n怪阿姨 - 累了痛了不爱了\n阿悠悠 - 一生与你擦肩而过\n旺仔小乔 - 春泥\n江肆 - 梦里梦外都是你\n周传雄 - 冬天的秘密\n杨坤 - 萱草花\n乔洋 - 你的烂借口\n黄品源 - 海浪\n杨千嬅 - 处处吻\n周华健 - 有没有一首歌会让你想起我\n伊格赛听 - 还是要分开\n洛先生 - 爱没有结果\n洛先生 - 江南寻你\n洛先生 - 如果我没爱过\n洛先生 - 爱没有结果\n洛先生 - 影子说\nF.I.R.飞儿乐团 - 我们的爱\n5音 - mojito\n汪苏泷 - 情歌\n阿YueYue - 寻屿\n周传雄 - 寂寞沙洲冷\n莫叫姐姐 - 不该用情\nBEYOND - 不再犹豫\n周杰伦 - 给我一首歌的时间\nLKer林柯 - 满目星辰皆是你\n棒棒堂 - 苦茶\n刘德华 - 一起走过的日子\n刘允乐 - 太早\n梁汉文 - 缠绵游戏\n张靓颖 - 想你,零点零一分\n吕口口 - 失忆\n胜屿 - 我们说好的\n胜屿 - 桃花酒\n胜屿 - 笑着结束\n胜屿 - 落叶的忧伤\n胜屿 - 劝退\nycccc - 消失人海\n陈小春 - 相依为命\n柳爽 - 漠河舞厅\n苏见信 (信) - 魂\n韦雄 - 根本你不懂得爱我\n黄霄雲 - 星辰大海\n王菲 - 如愿\n韩红 - 飞云之下\n小蓝背心 - 我怕来者不是你\n付豪 - 也很值得\n董书含 - 下一个天亮\nBEYOND - 无悔这一生\nG.E.M. 邓紫棋 - 再见\n海来阿木 - 五十年以后\n小阿七 - 五十年以后\n郁可唯 - 路过人间\n零一九零贰 - 忘川彼岸\n白小白 - 我爱你不问归期\nA1 TRIP - 放空\n朱添泽 - 想\n苏星婕 - 风吹过八千里\n朱添泽 - 想\n阿吉太组合 - 阿衣莫\n王富贵 - 情字最大\n洛先生 - 孤城\n刘兴宇 - 拥抱你的星河万里\n赵乃吉 - 曾经你说\n房东的猫 - New Boy\n杨小壮 - 最后的人\n陶喆 - 爱,很简单\n九局 - 刀山火海\n木杰 - 醉过多少回\n海伦 - 她很孤独\n王小乱 - 不挽留没回头\n毛阿敏 - 相思\nIN-K - 落日与晚风\n音决 - 累了痛了不爱了\n凤凰传奇 - 我从草原来\n韩可可 - 迷失在梦中\n刘涛 - 红颜旧\n虎二 - 窗\n程佳佳 - 别错过\n仇远旭 - 就是爱你\n李浩然 - 就是爱你\n上官红燕 - 玛尼情歌\n王赫野 - 大风吹\n大籽 - 白月光与朱砂痣\n朴惠子 - 盲童\n回小仙 - 醒不来的梦\n李浩然 - 一千零一次我爱你\n李宇春 - 和你一样\n刘惜君 - 菩提偈\n老光 - 有幸\n木风 - 某人\n程响 - 世界这么大还是遇见你\n阿冗 - 你的答案\n杨小壮 - 一个人挺好\nG.E.M. 邓紫棋 - 句号\n小阿枫 - 最远的你是我最近的爱\n小阿枫 - 心要让你听见\n小阿枫 - 2019抖音近期热播《小阿枫翻唱全集》连版车载\n吕口口 - 世间美好与你环环相扣\n吕口口 - 风度\n华晨宇 - 烟火里的尘埃\n黎林添娇 - 出现又离开\n许绍洋 - 花香\n汪苏泷 - 风度\n小倩 - 那个女孩\n张泽熙 - 那个女孩\n任盈盈 - 多年以后\n李代沫 - 这就是爱情\n阿悠悠 - 念旧\n熊孩子儿歌 - 我上幼儿园\n熊孩子儿歌 - 左手右手\n熊孩子儿歌 - 洗澡歌原唱版\n兔小贝 - 洗澡歌\n范晓萱 - 我爱洗澡\n王心凌 - 爱的天灵灵\n王心凌 - Honey\n王心凌 - 爱你\n六哲 - 让全世界知道我爱你\n大嘴巴 - 永远在身边\n黄品源 - 你怎么舍得我难过\nT-ara (티아라) - DAY BY DAY\n宇西 - 出现又离开\n匿名情书 - 她的眼睛会唱歌\n梦涵 - 17岁\n谢宇伦 - 夜半\nKatie Sky - Monsters\n半吨兄弟 - 爱情错觉\n半阳 - 一曲相思\n焦迈奇 - 我的名字\n李荣浩 - 年少有为\nIce Paper - 心如止水\n陈雪凝 - 你的酒馆对我打了烊\nG.E.M. 邓紫棋 - 来自天堂的魔鬼\n九局 - 我已经爱上你\n吴青峰 - 起风了\n蔡依林 - 说爱你\n杨胖雨 - 情深深雨濛濛\n王七七 - 我愿意平凡的陪在你身旁\nEd Sheeran - Shape of You\nHATO唱见组 - 盗将行\nSHAUN (숀) - Way Back Home\n简弘亦 - 不染\n张贤赫 - 囧架架\n张紫豪 - 可不可以\nJoel Adams - Please Don't Go\nCorki刘宗鑫 - 下坠Falling\n王大毛 - 去年夏天\n毛不易 - 牧马城市\n仇志 - 再也不会遇见第二个她\n李哈哈 - 再也不会遇见第二个她\n半阳 - 流浪\n郭聪明 - 你会遇见更好的人\n萧敬腾 - 梦一场\n烟把儿乐队 - 纸短情长\nChristine Welch - 一百万个可能\n菌菌酱 - 有可能的夜晚\nG.E.M. 邓紫棋 - 光年之外\n大壮 - 伪装\n古羽 - 醉仙美\n张信哲 - 别怕我伤心\n邓丽欣 - 电灯胆\n王力宏 - 缘分一道桥\n梁咏琪 - 胆小鬼\n小阿枫 - 心要让你听见\n魏新雨 - 余情未了\n艾辰 - 出山\n黄诗扶 - 九万字\n范玮琪 - 如果的事\n方雅贤 - 遇到\n蒋蒋 - 当真\n雷婷 - 撕夜\n鞠文娴 - 江海不渡你\n于晴 - 心如止水\n陈雪凝 - 绿色\n卓舒晨 - 走着走着花就开了\n秦岚 - 雪落下的声音\n展展与罗罗 - 沙漠骆驼\n赵传 - 我很丑,可是我很温柔\n马良 - 往后余生\n胡66 - 浪人琵琶\n曲肖冰 - 卡布奇诺\n蒙安 - 甜心\n王逗逗 - 小甜心\n李贰叁 - 往后余生\n胡66 - 天生难猜\n阳逸晨 - 小可爱\n冯提莫 - 佛系少女\n高安 - 花桥流水\n秋裤大叔 - 一晃就老了\n孙语赛 - 不仅仅是喜欢\n小潘潘(潘柚彤) - 学猫叫\n佳利 - 2799\n王乐乐 - 雨后人去楼也空\n刘辰希 - 专属情歌\n萌哥 - 行星\n诗人凉 - 白色桔梗花\n青蛙乐队 - 小跳蛙\n广东雨神 - 广东爱情故事\n孙子涵 - 我们之间\n周笔畅 - 最美的期待\nEd Sheeran - Shape of You\nTFBOYS - 我们的时光\n张北北 - 拥抱你离去\n毛不易 - 像我这样的人\nLambsey (ラムジ) - PLANET\n大壮 - 差一步\n林俊杰 - 可惜没如果\n林俊杰 - 醉赤壁\n于文文 - 体面\n鞠文娴 - BINGBIAN病变\n袁娅维TIA RAY - 说散就散\n周思涵 - 过客\n买辣椒也用券 - 起风了\n张凯 - 樱花树下的约定\n胡66 - 空空如也\nLuis Fonsi - Despacito\nMKJ - Time\n新乐尘符 - 123我爱你\nG.E.M. 邓紫棋 - Mascara\n祈Inory - 格斗宝贝\n李玉刚 - 刚好遇见你\n儿歌 - 拔萝卜\n吴淑敏 - 蜗牛与黄鹂鸟\n叶炫清 - 九张机\n任立佳 - 两个我们\n薛黛霏 - 非酋\n岑宁儿 - 追光者\n黑崎子 - 最美情侣\n刘大美人 - 你是我爱的人\n校长(张驰) - 过得好吗\n李朝 - 情话微甜\n阿冷 - 春风吹\n赵天宇 - 奇妙能力歌\n毛不易 - 消愁\n小贱 - 我的女人\n方大同 - 春风吹\n薛黛霏 - 欧皇\n神马乐团 - 爱河\n白小白 - 过去的照片\nDP龙猪 - 全部都是你\n校长(张驰) - 带你去旅行\n孙辉 - 没有车没有房\n熊孩子儿歌 - 小跳蛙\n李祥祥 - 原谅\n陈一发儿 ver. - 童话镇\n杨宗纬 - 凉凉\n迪丽热巴 - 舍不得\n郁可唯 - 夙念\n李溪芮 - 爱得起\n谢欣芷 - 幸福的孩子爱唱歌\n林妙可 - 爱我你就抱抱我\n艳菲儿 - 百变小公主\n许飞 - 不说再见\n白宇 - 沉眠\n蔡淳佳 - 依恋\n张碧晨 - 曾经守候\n小曲儿 - 小幸运\n曾轶可 - 有可能的夜晚\n潘美辰 - 我曾用心爱着你\n张赫 - 一笑倾城\n张碧晨 - 下一秒\nWalk Off the Earth - Summer Vibe\nMi2 - 爱\n梅雨萱 - 交换爱\n孙燕姿 - 遇见\n朱主爱 - 好想你\n华语群星 - 亲爱的小孩\n庄心妍 - 再见只是陌生人\n海生 - 情一动心就痛\n萌萌哒天团 - 帝都\n刘是非 - 带着我的爱嫁给他\n姜育恒 - 女人的选择\n杨颖 - 绿罗裙\n徐菲琳 - 小幸福\n韦萱 - 神武笑春风\n天佑 - 一人饮酒醉\n郝云 - 活着\n李荣浩 - 李白\n柯以敏 - 谢谢你让我这么爱你\n林俊杰 - 被风吹过的夏天\n林俊杰 - 期待你的爱\n汪苏泷 - 如果时光倒流\n程响 - 怎么能忘了\n徐梵溪 - 燃烧翅膀\n邱永传 - 何时才能让你说爱我\n威仔 - 不爱又何必纠缠\n海鸣威 - 一个人的北京\n魏新雨 - 恋人心\n高姗 - 遇见你的时候所有星星都落到我头上\n汪苏泷 - 某人\n王凌 - 情戏\n孙露 - 离别的秋天\n苏芮 - 是否\n陶钰玉 - 你是我的唯一"
song_list = song.split('\n')
failure_list = []
download_path = "download"

def get_mp3_files_name(folder_path):
    mp3_names = []

    # 遍历文件夹中的文件
    for filename in os.listdir(folder_path):
        # 检查文件是否是以.mp3结尾
        if filename.endswith(".mp3"):
            # 获取文件名(去掉后缀)并添加到链表中
            mp3_name = os.path.splitext(filename)[0]
            mp3_names.append(mp3_name)

    print(len(mp3_names))

    return mp3_names

def get_mp3_files_number(folder_path):
    # 构建匹配的文件路径模式
    pattern = os.path.join(folder_path, '*.mp3')

    # 使用 glob.glob 获取匹配的文件列表
    mp3_files = glob.glob(pattern)

    print(f"在文件夹 '{folder_path}' 中找到 {len(mp3_files)} 个 .mp3 文件。")

    # 返回文件个数
    return len(mp3_files)

##过滤调 list_a 中存在的 list_b中的元素
def filter_song_list(list_a,list_b):
    filtered_list_A = [item for item in list_a if item not in list_b]

    return filtered_list_A

def download_song(name,url):
    response = requests.get(url)

    save_path = "{}/{}.mp3".format(download_path,name)

    if response.status_code == 200:
        with open(save_path, 'wb') as file:
            file.write(response.content)
        print("下载完成")
    else:
        print(f"下载失败,状态码:{response.status_code}")
        failure_list.append(name)

def get_song(name):

    try:
        #获取时间戳
        timestamp = int(time.time())
        # 目标网页URL
        url = "http://www.22a5.com/so/{}.html".format(name)
        url = quote(url, safe=";/?:@&=+$,", encoding="utf-8")

        # 发送GET请求获取HTML内容
        response = requests.get(url)
        html_content = response.text
        # 解析HTML内容
        tree = html.fromstring(html_content)

        # 使用XPath表达式提取信息
        # 这里以提取标题为例
        title = tree.xpath('/html/body/div[1]/div/div[2]/ul/li[1]/div/a/@href')[0]
        # 定义请求头
        headers = {
            'Accept': 'application/json, text/javascript, */*; q=0.01',
            'Accept-Encoding': 'gzip, deflate',
            'Accept-Language': 'zh-CN,zh;q=0.9',
            'Connection': 'keep-alive',
            'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
            'Cookie': 'down_mima=ok; Hm_lvt_be42100b2d74ee4e1143740c9129e77e=1701335792,1701393498; Hm_lpvt_be42100b2d74ee4e1143740c9129e77e={}'.format(timestamp),
            'Host': 'www.22a5.com',
            'Origin': 'http://www.22a5.com',
            'Referer': 'http://www.22a5.com/{}'.format(title),
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.69',
            'X-Requested-With': 'XMLHttpRequest'
        }

        # 定义正则表达式
        pattern = r"/mp3/(\w+)\.html"

        # 使用 re 模块进行匹配
        match = re.match(pattern, title)

        # 提取匹配的部分
        if match:
            extracted_value = match.group(1)
             # 定义POST请求的数据
            data = {
                'id': extracted_value,
                'type': 'music'
            }

            #可能请求失败请求5次
            for i in range(5):
                # 发送POST请求
                response = requests.post('http://www.22a5.com/js/play.php', headers=headers, data=data)

                song_json = json.loads(response.text)

                if(song_json['url'] == ''):
                    if(i == 5):
                        print("下载失败:{}".format(name))
                        failure_list.append(name)
                    time.sleep(1)
                    continue
                else:
                    print("{}:{}".format(name,song_json['url']))
                    download_song(name,song_json['url'])
                    break
        else:
            print("下载失败:{}".format(name))

      
    except Exception as e:
        print("下载失败:{}".format(name))
        failure_list.append(name)
        print(str(e))

if __name__ == "__main__":

    if not os.path.exists(download_path):
        try:
            os.makedirs(download_path)
            print(f"文件夹 '{download_path}' 创建成功!")
        except OSError as e:
            print(f"创建文件夹 '{download_path}' 时出错:{e}")

    unique_list = list(set(song_list))  #去掉重复的
    remain_sond_list = filter_song_list(unique_list,get_mp3_files_name(download_path)) #去掉已经下载过的

    print("下载歌曲数量:{}".format(len(remain_sond_list)))

    for i in range(len(remain_sond_list)):
        get_song(remain_sond_list[i])

    with open("failure.txt","w+") as file:
        for item in failure_list:
            file.write(f"{item}\n")

    get_mp3_files_number(download_path)

免费评分

参与人数 13吾爱币 +18 热心值 +13 收起 理由
bf191 + 1 + 1 谢谢@Thanks!
魔幻冰扬 + 1 + 1 好网站,好音乐
renzhen1997 + 1 + 1 好网站,好音乐 爬虫不会玩
guoruihotel + 1 + 1 谢谢@Thanks!
无常gui + 1 + 1 我很赞同!
djmlxm + 1 + 1 我很赞同!
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
jcwoai + 1 + 1 热心回复!
cmojo + 1 + 1 谢谢@Thanks!
2595453382 + 1 + 1 谢谢@Thanks!
坐久落花多 + 1 + 1 用心讨论,共获提升!
1045837055lucy + 1 赶紧保存,没准什么时候就没有了。
xuesecnm + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

bohong65 发表于 2023-12-1 11:58
网址收藏了批量爬取就算了,减小网站压力
phdlijing 发表于 2023-12-1 13:15
htxz2022 发表于 2023-12-1 12:20
wyh138 发表于 2023-12-1 11:57
代码结构很规范,让人查看很舒服,对小白很友好
 楼主| .Net_破解 发表于 2023-12-1 12:27
bohong65 发表于 2023-12-1 11:58
网址收藏了批量爬取就算了,减小网站压力

哈哈,里面做了延时的,就是数量太多,手动有点难受
utemdwiu 发表于 2023-12-1 13:09
收藏一下,以后能用
52soft 发表于 2023-12-1 13:18
有这么好的东东
FruitBaby 发表于 2023-12-1 14:01
刚试了一下,速度有点慢
fengliuyang 发表于 2023-12-1 14:28
不会做,但是支持
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 14:42

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表