import requests
from lxml import etree
import xlwt
# 定义空列表
musicList = []
# 将数据写入文件
def save_file():
workbook = xlwt.Workbook(encoding='utf-8') # 创建一个Excel文件
sheet = workbook.add_sheet('Music List') # 在文件中创建一个名为’Music List’的表格
headers = ['歌曲名', '表演者', '发行时间', '流派', '评分'] # 表格的表头
for i, header in enumerate(headers): # 遍历表头列表。enumerate组成索引序列,同时获得索引和值
sheet.write(0, i, header) # 在第一行写入表头
for i, info in enumerate(musicList): # 遍历音乐信息列表
sheet.write(i+1, 0, info['title']) # 在第i+1行第1列写入歌曲名
sheet.write(i+1, 1, info['performer']) # 在第i+1行第2列写入表演者
sheet.write(i+1, 2, info['time']) # 在第i+1行第3列写入发行时间
sheet.write(i+1, 3, info['type']) # 在第i+1行第4列写入流派
sheet.write(i+1, 4, info['score']) # 在第i+1行第5列写入评分
workbook.save('musicList.xls') # 保存Excel文件为'musicList.xls'
# 获取数据存入musicList列表
def gain_data(urllist):
for url in urllist:
response = requests.get(url=url) #发起请求
response.encoding=response.apparent_encoding#修正编码
# 响应正常
if response.status_code == 200:
html = response.text # 获取响应的HTML内容。response.text返回的类型str
# 使用lxml库解析HTML,etree.HTML()用来把得到的HTML对象,转变成属于lxml.etree._Element的类对象,作为_Element对象,可以使用getparent()、remove()、xpath()等方法
tree = etree.HTML(html)
music_list = tree.xpath('//div[@class="pl2"]') # 使用XPath定位音乐信息所在的节点
# 遍历每一个music_list:
for music in music_list: # 遍历每一个音乐信息节点
title = music.xpath('.//a/text()')[0].strip() # 使用XPath获取歌曲名,并去除首尾空格
performer_info = music.xpath('.//p[@class="pl"]/text()')[0].strip().split('/') # 使用XPat