Python实例---爬去酷狗音乐
项目一:获取酷狗TOP 100
http://www.kugou.com/yy/rank/home/1-8888.html
排名

文件&&歌手

时长

效果:

附源码:
import time
import json
from bs4 import BeautifulSoup
import requests class Kugou(object):
def __init__(self):
self.header = {
"User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0'
} def getInfo(self, url):
html = requests.get(url, headers=self.header)
soup = BeautifulSoup(html.text, 'html.parser')
# print(soup.prettify())
ranks = soup.select('.pc_temp_num')
titles = soup.select('.pc_temp_songlist > ul > li > a') # 层层标签查找
times = soup.select('.pc_temp_time')
for rank, title, songTime in zip(ranks, titles, times):
data = {
# rank 全打印就是带HTML标签的
'rank': rank.get_text().strip(),
'title': title.get_text().split('-')[1].strip(),
'singer': title.get_text().split('-')[0].strip(),
'songTime': songTime.get_text().strip()
}
s = str(data)
print('rank:%2s\t' % data['rank'], 'title:%2s\t' % data['title'], 'singer:%2s\t' %data['singer'], 'songTime:%2s\t' % data['songTime'])
with open('hhh.txt', 'a', encoding='utf8') as f:
f.writelines(s + '\n') if __name__ == '__main__':
urls = [
'http://www.kugou.com/yy/rank/home/{}-8888.html'.format(str(i)) for i in range(30)
] kugou = Kugou()
for url in urls:
kugou.getInfo(url)
time.sleep(1)
部分代码解析
--------------------------------------------------------------------
urls = ['http://www.kugou.com/yy/rank/home/{}-8888.html'.format(str(i)) for i in range(1, 5)]
for i in urls:
print(i) 结果打印:
http://www.kugou.com/yy/rank/home/1-8888.html
http://www.kugou.com/yy/rank/home/2-8888.html
http://www.kugou.com/yy/rank/home/3-8888.html
http://www.kugou.com/yy/rank/home/4-8888.html
--------------------------------------------------------------------
for rank, title, songTime in zip(ranks, titles, times):
data = {
# rank 全打印就是带HTML标签的
'rank': rank.get_text().strip(),
'title': title.get_text().split('-')[0].strip(),
'singer': title.get_text().split('-')[1].strip(),
'songTime': songTime.get_text()
}
print(data['rank'])
print(data['title'])
print(data['singer'])
print(data['songTime']) 结果打印:
1
飞驰于你
许嵩
4: 04
--------------------------------------------------------------------
for rank, title, songTime in zip(ranks, titles, times):
data = {
# rank 全打印就是带HTML标签的
'rank': rank,
'title': title,
'songTime': songTime
}
print(data['rank'])
print(data['title'])
print(data['songTime'])
结果打印:
<span class="pc_temp_num">
<strong>1</strong>
</span>
<a class="pc_temp_songname" data-active="playDwn" data-index="0" hidefocus="true" href="http://www.kugou.com/song/pjn5xaa.html" title="许嵩 - 飞驰于你">许嵩 - 飞驰于你</a>
<span class="pc_temp_time"> 4:04 </span>
项目二:搜索曲目获取URL
根据关键字搜索后的结果:

# encoding=utf-8
# Time : 2018/4/27
# Email : z2615@163.com
# Software: PyCharm
# Language: Python 3
import requests
import json class KgDownLoader(object):
def __init__(self):
self.search_url = 'http://songsearch.kugou.com/song_search_v2?callback=jQuery191034642999175022426_1489023388639&keyword={}&page=1&pagesize=30&userid=-1&clientver=&platform=WebFilter&tag=em&filter=2&iscorrection=1&privilege_filter=0&_=1489023388641' # .format('园游会')
self.play_url = 'http://www.kugou.com/yy/index.php?r=play/getdata&hash={}'
self.song_info = {
'歌名': None,
'演唱者': None,
'专辑': None,
'filehash': None,
'mp3url': None
} def get_search_data(self, keys):
search_file = requests.get(self.search_url.format(keys))
search_html = search_file.content.decode().replace(')', '').replace(
'jQuery191034642999175022426_1489023388639(', '')
views = json.loads(search_html)
for view in views['data']['lists']:
song_name = view['SongName'].replace('<em>', '').replace('</em>', '')
album_name = view['AlbumName'].replace('<em>', '').replace('</em>', '')
sing_name = view['SingerName'].replace('<em>', '').replace('</em>', '')
file_hash = view['FileHash']
new_info = {
'歌名': song_name,
'演唱者': sing_name,
'专辑': album_name if album_name else None,
'filehash': file_hash,
'mp3url': None
}
self.song_info.update(new_info)
yield self.song_info def get_mp3_url(self, filehash):
mp3_file = requests.get(self.play_url.format(filehash)).content.decode()
mp3_json = json.loads(mp3_file)
real_url = mp3_json['data']['play_url']
self.song_info['mp3url'] = real_url
yield self.song_info def save_mp3(self, song_name, real_url):
with open(song_name + ".mp3", "wb")as fp:
fp.write(requests.get(real_url).content) if __name__ == '__main__':
kg = KgDownLoader()
mp3_info = kg.get_search_data(input('请输入歌名:'))
for x in mp3_info:
mp3info = kg.get_mp3_url(x['filehash'])
for i in mp3info:
print(i)

项目三:搜索下载歌曲
代码仅供学习参考
from selenium import webdriver
from bs4 import BeautifulSoup
import urllib.request
from selenium.webdriver.common.action_chains import ActionChains
input_string = input('>>>please input the search key:')
#input_string="你就不要想起我"
driver = webdriver.Chrome()
driver.get('http://www.kugou.com/')
a=driver.find_element_by_xpath('/html/body/div[1]/div[1]/div[1]/div[1]/input') #输入搜索内容/html/body/div[1]/div[1]/div[1]/div[1]/input
a.send_keys(input_string)
driver.find_element_by_xpath('/html/body/div[1]/div[1]/div[1]/div[1]/div/i').click() #点击搜索/html/body/div[1]/div[1]/div[1]/div[1]/div/i
for handle in driver.window_handles:#方法二,始终获得当前最后的窗口,所以多要多次使用
driver.switch_to_window(handle)
#result_url = driver.current_url
#driver = webdriver.Firefox()
#driver.maximize_window()
#driver.get(result_url)
#j=driver.find_element_by_xpath('/html/body/div[4]/div[1]/div[2]/ul[2]/li[2]/div[1]/a').get_attribute('title')测试
#print(j)
soup = BeautifulSoup(driver.page_source,'lxml')
PageAll = len(soup.select('ul.list_content.clearfix > li'))
print(PageAll)
for i in range(1,PageAll+1):
j=driver.find_element_by_xpath('/html/body/div[4]/div[1]/div[2]/ul[2]/li[%d]/div[1]/a'%i).get_attribute('title')
print('%d.'%i + j)
choice=input("请输入你要下载的歌曲(输入序号):")
#global mname
#mname=driver.find_element_by_xpath('/html/body/div[4]/div[1]/div[2]/ul[2]/li[%d]/div[1]/a'%choice).get_attribute('title')#歌曲名
a=driver.find_element_by_xpath('/html/body/div[4]/div[1]/div[2]/ul[2]/li[%s]/div[1]/a'%choice)#定位
b=driver.find_element_by_xpath('/html/body/div[4]/div[1]/div[2]/ul[2]/li[%s]/div[1]/a'%choice).get_attribute('title')
actions=ActionChains(driver)#selenium中定义的一个类
actions.move_to_element(a)#将鼠标移动到指定位置
actions.click(a)#点击
actions.perform()
#wait(driver)?
#driver = webdriver.Firefox()
#driver.maximize_window()
#driver.get(result_url)
#windows = driver.window_handles
#driver.switch_to.window(windows[-1])
#handles = driver.window_handles
for handle in driver.window_handles:#方法二,始终获得当前最后的窗口,所以多要多次使用
driver.switch_to_window(handle)
Local=driver.find_element_by_xpath('//*[@id="myAudio"]').get_attribute('src')
print(driver.find_element_by_xpath('//*[@id="myAudio"]').get_attribute('src'))
def cbk(a, b, c):
per = 100.0 * a * b / c
if per > 100:
per = 100
print('%.2f%%' % per)
soup=BeautifulSoup(b)
name=soup.get_text()
path='D:\%s.mp3'%name
urllib.request.urlretrieve(Local, path, cbk)
print('finish downloading %s.mp3' % name + '\n\n')
【更多参考】https://blog.csdn.net/abc_123456___/article/details/81101845
Python实例---爬去酷狗音乐的更多相关文章
- python爬取酷狗音乐排行榜
本文为大家分享了python爬取酷狗音乐排行榜的具体代码,供大家参考,具体内容如下
- Java爬虫系列之实战:爬取酷狗音乐网 TOP500 的歌曲(附源码)
在前面分享的两篇随笔中分别介绍了HttpClient和Jsoup以及简单的代码案例: Java爬虫系列二:使用HttpClient抓取页面HTML Java爬虫系列三:使用Jsoup解析HTML 今天 ...
- python使用beautifulsoup4爬取酷狗音乐
声明:本文仅为技术交流,请勿用于它处. 小编经常在网上听一些音乐但是有一些网站好多音乐都是付费下载的正好我会点爬虫技术,空闲时间写了一份,截止4月底没有问题的,会下载到当前目录,只要按照bs4库就好, ...
- Python 应用爬虫下载酷狗音乐
应用爬虫下载酷狗音乐 首先我们需要进入到这个界面 想要爬取这些歌曲链接,然而这个是一个假的网站,虽然单机右键进行检查能看到这些歌曲的链接,可进行爬取时,却爬取不到这些信息. 这个时候我们就应该换一种思 ...
- python爬取酷狗音乐
url:https://www.kugou.com/yy/html/rank.html 我们随便访问一个歌曲可以看到url有个hash https://www.kugou.com/song/#hash ...
- 【Python】【爬虫】爬取酷狗音乐网络红歌榜
原理:我的上篇博客 import requests import time from bs4 import BeautifulSoup def get_html(url): ''' 获得 HTML ' ...
- 使用scrapy 爬取酷狗音乐歌手及歌曲名并存入mongodb中
备注还没来得及写,共爬取八千多的歌手,每名歌手平均三十首歌曲算,大概二十多万首歌曲 run.py #!/usr/bin/env python # -*- coding: utf-8 -*- __aut ...
- 爬去酷狗top500的数据
import requests from bs4 import BeautifulSoup import time headers={ #'User-Agent':'Nokia6600/1.0 (3. ...
- 【Python】【爬虫】爬取酷狗TOP500
好啦好啦,那我们来拉开我们的爬虫之旅吧~~~ 这一只小爬虫是爬取酷狗TOP500的,使用的爬取手法简单粗暴,目的是帮大家初步窥探爬虫长啥样,后期会慢慢变得健壮起来的. 环境配置 在此之前需要下载一个谷 ...
随机推荐
- Oracle10g 64位 在Windows 2008 Server R2 中的安装 解决方案
背景: 操作系统Windows 2008 Server R2 要安装Oracle10g 64位版本 安装时出现如下错误: 检查操作系统版本:必须是5.0,5.1,5.2 or 6.0.实际为6.1 未 ...
- git第一节----git config配置
@查看git的版本 git --version @查看git配置信息 git config --list config list分全局和局部,在根目录下执行git config --list显示为全局 ...
- 【webserver】使用python实现webserver,支持上传下载文件
#!/usr/bin/env python """Simple HTTP Server With Upload. This module builds on BaseHT ...
- SQL:多表联合更新
update 表一 set 表一.列1 = 表二.列1 from 表一,表二 where 表一.列2 = 表二.列2
- vb.net連接ACCESS数据库
'導入命名空間Imports System.Data.OleDb '定義變量 Dim Sql As String 'OleDb連線 Dim SqlAC As OleDbConnection Dim C ...
- 乐字节-Java8新特性之方法引用
上一篇小乐介绍了<Java8新特性-函数式接口>,大家可以点击回顾.这篇文章将接着介绍Java8新特性之方法引用. Java8 中引入方法引用新特性,用于简化应用对象方法的调用, 方法引用 ...
- Java虚拟机--虚拟机字节码执行引擎
Java虚拟机--虚拟机字节码执行引擎 所有的Java虚拟机的执行引擎都是一致的:输入的是字节码文件,处理过程是字节码解析的等效过程,输出的是执行结果. 运行时栈帧结构 用于支持虚拟机进行方法调用和方 ...
- Java基础——TreeSet
TreeSet是SortedSet接口的实现类,Sorted的英文意思是分类的:选择的. TreeSet可以确保集合元素处于排序状态.与HashSet集合相比,TreeSet还提供了如下几个额外方法: ...
- Inviting Friends(hdu3244 && zoj3187)完全背包+二分
Inviting Friends Time Limit: 1 Second Memory Limit: 32768 KB You want to hold a birthday party, invi ...
- Java-函数式编程(二)Lambda表达式
本文首发:Java-函数式编程(二)Lambda表达式 “Lambda 表达式”(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lamb ...