9ku音乐网音乐爬取,仅供交流~~

春节后,媳妇发现喜爱的许巍都听不了了,网易云啥的需要VIP,趁着假期,给她爬点音乐听听,,博她一乐,哈哈~~。成果如下。

9ku音乐网音乐爬取,仅供交流~~_第1张图片

9ku音乐网,按照歌手查询,获取url

9ku音乐网音乐爬取,仅供交流~~_第2张图片

xpath 获取网页歌曲名和路径

	pat1='//div[@class="singerMusic clearfix"]//div[@class="songName"]/a/@href'
	pat2='//div[@class="singerMusic clearfix"]//div[@class="songName"]/a//text()'
		idlist=html.xpath(pat1)
	titlelist=html.xpath(pat2)
     #从网页中获取所有歌曲名字
	songID1.extend(idlist)   #把多个列表合成一个列表
	songName.extend(titlelist)

分析各歌曲网页路径,/play/3001.htm 代表光辉岁月的地址
9ku音乐网音乐爬取,仅供交流~~_第3张图片
找到歌曲真实的链接,json文件中。
9ku音乐网音乐爬取,仅供交流~~_第4张图片

分析歌曲地址url 规律

#http://www.9ku.com/html/playjs/894/893142.js
#http://www.9ku.com/html/playjs/878/877683.js
#http://www.9ku.com/html/playjs/31/30001.js

可以发现,倒手第二栏数字来源为歌单地址数字窜前3位或者前两位+1 ,如894=893+1

9ku音乐网音乐爬取,仅供交流~~_第5张图片

发现规律,就好办了,全部代码如下。

import requests
import re
import time
import json
from lxml import etree
from urllib import request


header={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}


songID=[] #列表存放歌曲编号
songName=[]  #列表存放歌曲名字
songID1=[] #列表存放歌曲编号
#构造url
for i in range(0,1):
	url="http://www.9ku.com/geshou/1019.htm"    # 许巍
	# url="http://www.9ku.com/geshou/1075.htm"    #beyond
	req=request.Request(url,headers=header)
	data_html=request.urlopen(req).read().decode()
	print(data_html)

	html=etree.HTML(data_html)
	# pat1='//div[@class="singerMusic clearfix"]/ol[@id="fg"]//div[@class="songName"]/a/@href'
	# pat2='//div[@class="singerMusic clearfix"]/ol[@id="fg"]//div[@class="songName"]/a//text()'
	pat1='//div[@class="singerMusic clearfix"]//div[@class="songName"]/a/@href'
	pat2='//div[@class="singerMusic clearfix"]//div[@class="songName"]/a//text()'

	idlist=html.xpath(pat1)
	titlelist=html.xpath(pat2)
     #从网页中获取所有歌曲名字
	songID1.extend(idlist)   #把多个列表合成一个列表
	songName.extend(titlelist)
	# print(songID1)
	pat4='/play/(.*?).htm'
	for j in range(0,len(songID1)):
	    idlist2=re.findall(pat4,songID1[j])   #从网页中获取所有歌曲ID
	    songID.extend(idlist2)

print(songName)
print(songID)
print(len(songName))
print(len(songID))


#http://www.9ku.com/html/playjs/894/893142.js
#http://www.9ku.com/html/playjs/878/877683.js

for i in range(0,len(songID)):
	# songurl="http://mp32.9ku.com/upload/2016/03/22/62878.m4a"   #构造歌曲url
	# songurl="http://mp3.9ku.com/hot/2004/07-13/12697.mp3"
	num=int(songID[i][0:3])+1
	songurl="http://www.9ku.com/html/playjs/"+str(num)+"/"+str(songID[i])+".js"
	songname=songName[i]

	data2=requests.get(songurl).text  #在这里插入代码片
	# print(data2)

	pat3='"wma":"(.*?)","m4a"'
	url2=re.findall(pat3,data2)   #从网页中获取所有歌曲ID
	url3=url2[0]
	result_url = eval(repr(url3).replace('\\', ''))
	print(result_url)
	data=requests.get(result_url).content

	print("正在下载第",i+1,"首")
	with open("E:\\music5\\{}.mp3".format(songname),"wb") as f:
		f.write(data)
	time.sleep(0.5)

你可能感兴趣的:(爬虫学习,python,xpath,html)