Python爬虫爬取多首歌曲代码2

from lxml import etree
import requests
import json
from concurrent.futures import ThreadPoolExecutor

创建线程池

pool = ThreadPoolExecutor(max_workers=10)

请求头信息

headers = {
“User-Agent”: “Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400”
}
def download(id, name):
# 构造下载链接
url = f’http://music.163.com/song/media/outer/url?id={id}’
# 发送下载请求
response = requests.get(url=url, headers=headers).content
# 将响应内容写入文件
with open(name+’.mp3’, ‘wb’) as f:
f.write(response)
# 打印下载完成消息
print(name, ‘下载完成’)
def get_id(url):
# 发送请求获取页面内容
response = requests.get(url=url, headers=headers).text
# 使用XPath解析页面
page_html = etree.HTML(response)
# 提取歌曲列表信息
id_list = page_html.xpath(’//textarea[@id=“song-list-pre-data”]/text()’)[0]
# 解析歌曲列表信息,并逐个提交下载任务到线程池
for i in json.loads(id_list):
name = i[‘name’]
id = i[‘id’]
author = i[‘artists’][0][‘name’]
pool.submit(download, id, name+’-’+author)
# 关闭线程池
pool.shutdown()
if name == ‘main’:
# 用户输入歌曲关键词
keyword = input(“请输入歌曲名称:”)
# 构造搜索URL
search_url = f’https://music.163.com/api/search/get/web?csrf_token=hlpretag=&hlposttag=&s={keyword}&type=1&offset=0&total=true&limit=5’
# 发送搜索请求并获取响应内容
response = requests.get(url=search_url, headers=headers).json()
# 提取歌曲列表
song_list = response[‘result’][‘songs’]
# 遍历歌曲列表,逐个提交下载任务到线程池
for song in song_list:
name = song[‘name’]
id = song[‘id’]
author = song[‘artists’][0][‘name’]
pool.submit(download, id, name+’-’+author)
# 关闭线程池
pool.shutdown()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

易软科技(河源)有限公司

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值