ToB企服应用市场:ToB评测及商务社交产业平台

标题: 音乐爬虫(调试中) [打印本页]

作者: 半亩花草    时间: 昨天 22:26
标题: 音乐爬虫(调试中)
获取存在音乐链接的json数据
  1. import requests
  2. from pyquery import PyQuery
  3. import re
  4. def get_music_index(name):
  5.     headers = {
  6.         'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36',
  7.         'Referer': 'http://music.2t58.com/',
  8.         'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
  9.         'Accept-Encoding': 'gzip, deflate',
  10.         'Accept-Language': 'zh-CN,zh;q=0.9',
  11.         'Connection': 'keep-alive',
  12.         'Upgrade-Insecure-Requests': '1'
  13.     }
  14.     cookies = {
  15.         'Hm_lvt_b8f2e33447143b75e7e4463e224d6b7f': '1737002552',
  16.         'HMACCOUNT': 'F76AECD34A294FCC',
  17.         'Hm_lpvt_b8f2e33447143b75e7e4463e224d6b7f': '1737006718'
  18.     }
  19.     # 使用正确的域名和协议
  20.     encoded_name = requests.utils.quote(name)
  21.     url = f'http://music.2t58.com/so/{encoded_name}.html'
  22.     try:
  23.         response = requests.get(url, headers=headers, cookies=cookies, timeout=10)
  24.         response.raise_for_status()
  25.         
  26.         doc = PyQuery(response.content)
  27.         names = doc(".name").items()
  28.         for index, item in enumerate(names, start=1):
  29.             print(f"选项 {index}: {item.text().strip()}")
  30.             if index == 7:
  31.                 break
  32.         ex = r'<a href="https://www.cnblogs.com/song/(.*?).html" target="_mp3">.*?</a>'
  33.         song_ids = re.findall(ex, response.text, re.S)
  34.         
  35.         return song_ids[:7]
  36.     except requests.exceptions.RequestException as e:
  37.         print(f"请求出错: {e}")
  38.         return []   
  39. def download_music(song_id):
  40.     # 设置 HTTP 请求头
  41.     headers = {
  42.         'Accept': 'application/json, text/javascript, */*; q=0.01',  # 接受的内容类型
  43.         'Accept-Encoding': 'gzip, deflate',  # 支持的编码格式
  44.         'Accept-Language': 'zh-CN,zh;q=0.9',  # 支持的语言
  45.         'Connection': 'keep-alive',  # 连接保持活跃
  46.         'Content-Length': '26',  # 内容长度
  47.         'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',  # 内容类型
  48.         'Cookie': 'Hm_lvt_b8f2e33447143b75e7e4463e224d6b7f=1690974946; Hm_lpvt_b8f2e33447143b75e7e4463e224d6b7f=1690976158',  # Cookie
  49.         'Host': 'www.2t58.com',  # 请求的主机
  50.         'Origin': 'https://www.2t58.com',  # 请求的来源
  51.         'Referer': 'https://www.2t58.com/song/bWhzc3hud25u.html',  # 请求的来源页面
  52.         'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36',  # 用户代理
  53.         'X-Requested-With': 'XMLHttpRequest'  # 请求类型
  54.     }
  55.     # 构造 POST 请求的数据
  56.     data = {'id': song_id, 'type': 'music'}
  57.     # 要请求的 URL
  58.     url2 = 'https://www.2t58.com/js/play.php'
  59.     # 发送 POST 请求获取歌曲播放信息
  60.     resp2 = requests.post(url=url2, headers=headers, data=data)
  61.     # 解析返回的 JSON 数据
  62.     json_data = resp2.json()
  63.     print(json_data)
  64. if __name__ == "__main__":
  65.     name = input("请输入歌曲名称: ")
  66.     music_index = get_music_index(name)
  67.     # print(music_index)
  68.     # if music_index:
  69.     #     print("找到以下歌曲ID:")
  70.     #     for idx, song_id in enumerate(music_index, start=1):
  71.     #         print(f"{idx}: {song_id}")
  72.     # else:
  73.     #     print("没有找到相关歌曲。")
  74.     num = int(input("请输入歌曲的序列:"))
  75.     song_id = music_index[num - 1]
  76.     download_music(song_id)
  77.     print("按回车直接退出...")
  78. # 等待用户按键,这里我们只接受单个空格键
  79.     while True:
  80.         user_input = input()
  81.         if user_input == "":  # 检查用户是否只输入了一个空格
  82.             break
复制代码
实现下载音乐(如今默认的mp3)
  1. import requests
  2. from pyquery import PyQuery
  3. import re
  4. def get_music_index(name):
  5.     headers = {
  6.         'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36',
  7.         'Referer': 'http://music.2t58.com/',
  8.         'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
  9.         'Accept-Encoding': 'gzip, deflate',
  10.         'Accept-Language': 'zh-CN,zh;q=0.9',
  11.         'Connection': 'keep-alive',
  12.         'Upgrade-Insecure-Requests': '1'
  13.     }
  14.     cookies = {
  15.         'Hm_lvt_b8f2e33447143b75e7e4463e224d6b7f': '1737002552',
  16.         'HMACCOUNT': 'F76AECD34A294FCC',
  17.         'Hm_lpvt_b8f2e33447143b75e7e4463e224d6b7f': '1737006718'
  18.     }
  19.     # 使用正确的域名和协议
  20.     encoded_name = requests.utils.quote(name)
  21.     url = f'http://music.2t58.com/so/{encoded_name}.html'
  22.     try:
  23.         response = requests.get(url, headers=headers, cookies=cookies, timeout=10)
  24.         response.raise_for_status()
  25.         
  26.         doc = PyQuery(response.content)
  27.         names = doc(".name").items()
  28.         for index, item in enumerate(names, start=1):
  29.             print(f"选项 {index}: {item.text().strip()}")
  30.             if index == 7:
  31.                 break
  32.         ex = r'<a href="https://www.cnblogs.com/song/(.*?).html" target="_mp3">.*?</a>'
  33.         song_ids = re.findall(ex, response.text, re.S)
  34.         
  35.         return song_ids[:7]
  36.     except requests.exceptions.RequestException as e:
  37.         print(f"请求出错: {e}")
  38.         return []   
  39. def download_music(song_id):
  40.     # 设置 HTTP 请求头
  41.     headers = {
  42.         'Accept': 'application/json, text/javascript, */*; q=0.01',  # 接受的内容类型
  43.         'Accept-Encoding': 'gzip, deflate',  # 支持的编码格式
  44.         'Accept-Language': 'zh-CN,zh;q=0.9',  # 支持的语言
  45.         'Connection': 'keep-alive',  # 连接保持活跃
  46.         'Content-Length': '26',  # 内容长度
  47.         'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',  # 内容类型
  48.         'Cookie': 'Hm_lvt_b8f2e33447143b75e7e4463e224d6b7f=1690974946; Hm_lpvt_b8f2e33447143b75e7e4463e224d6b7f=1690976158',  # Cookie
  49.         'Host': 'www.2t58.com',  # 请求的主机
  50.         'Origin': 'https://www.2t58.com',  # 请求的来源
  51.         'Referer': 'https://www.2t58.com/song/bWhzc3hud25u.html',  # 请求的来源页面
  52.         'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36',  # 用户代理
  53.         'X-Requested-With': 'XMLHttpRequest'  # 请求类型
  54.     }
  55.     # 构造 POST 请求的数据
  56.     data = {'id': song_id, 'type': 'music'}
  57.     # 要请求的 URL
  58.     url2 = 'https://www.2t58.com/js/play.php'
  59.     # 发送 POST 请求获取歌曲播放信息
  60.     resp2 = requests.post(url=url2, headers=headers, data=data)
  61.     # 解析返回的 JSON 数据
  62.     json_data = resp2.json()
  63.     return json_data
  64. # 下载文件并保存
  65. def download_song(url, filename):
  66.     try:
  67.         response = requests.get(url)
  68.         response.raise_for_status()  # 如果响应状态码不是200,会抛出异常
  69.         with open(filename, 'wb') as file:
  70.             file.write(response.content)
  71.         print(f"歌曲已成功下载并保存为 {filename}")
  72.     except requests.exceptions.RequestException as e:
  73.         print(f"下载过程中发生错误: {e}")
  74. if __name__ == "__main__":
  75.     name = input("请输入歌曲名称: ")
  76.     music_index = get_music_index(name)
  77.     num = int(input("请输入歌曲的序列:"))
  78.     song_id = music_index[num - 1]
  79.     json_data = download_music(song_id)
  80.     # 提取 URL 和标题
  81.     url = json_data['url']
  82.     title = json_data['title']
  83.     filename = title + '.mp3'
  84.     filename = filename.replace('《', '').replace('》', '').replace('[', '').replace(']', '').replace('/', '_')
  85.     print("歌曲URL: ", url)
  86.     print("保存为文件: ", filename)
  87.     download_song(url, filename)
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4