作者:黄体测字_335 | 来源:互联网 | 2018-07-18 09:30
本文实例讲述了Python实现提取谷歌音乐搜索结果的方法。分享给大家供大家参考。具体如下:
Python的简单脚本,用于提取谷歌音乐搜索页面中的歌曲信息,包括歌曲名,作者,专辑名,现在链接等,最多只提取10页结果。
#! /usr/bin/env python
#coding=utf-8
'''
Created on 2011-8-19
@author: yaoboyuan
'''
from urllib import request,parse
import re,sys
def extractSongRawData(text):
'抓取每一首歌的原始数据'
text = re.sub('\n+','',text)
sOngList= re.findall('\',text)
nums = len(songList)
print('search ' + str(nums) + ' songs')
return songList
def translate(text):
'去掉text中的无用字符,转换unicode码'
text = re.sub('\','',text)
text = re.sub('\ ','',text)
#find the 成 and translate into chinese
s = re.findall('&#([0-9]+);',text)
if len(s)<=0:
return text
else:
text = ''
for i in range(len(s)):
value = int(s[i],10) #from str'123' to 10 base's int 124
text += chr(value) #from value to char
return text
def extractSongName(song):
'提取歌曲名字'
td = re.findall('(&#63;:\)',song)
name = re.findall('.+&#63;\(.*&#63;)\',td[0])
sOngName= translate(name[0])
return songName
def extractAuthorName(song):
'提取作者名字'
td = re.findall('(&#63;:\)',song)
name = re.findall('.+&#63;\(.*&#63;)\',td[0])
authorName = name[0]
authorName = translate(authorName)
return authorName
def extrackAlbumName(song):
'提取专辑名字'
td = re.findall('(&#63;:\)',song)
name = re.findall('.+&#63;\(.*&#63;)\',td[0])
albumName = translate(name[0])
return albumName
def extractID(song):
'提取歌曲id'
td = re.findall('''\0:
return td[0]
else:
return song
def extractLink(song):
'提取歌曲下载链接'
td = re.findall('''\''',song)
if len(td) == 0:
return 'NULL'
s = str(td[0])
rawLink = re.findall('http.*&#63;(&#63;=\&#63;)',s)
if len(rawLink) == 0:
return s
link = rawLink[0]
link = re.sub('%3D','=',link)
id = extractID(song)
return link + '&#63;id=' + id
def extractPageNums(text):
'提取返回结果的页数,最多要10页'
pageList = re.findall('page_link',text)
return len(pageList)
def extractSongInfo(song):
'提取歌曲信息,返回歌曲列表'
sOngList= []
for i in range(len(song)):
sOngName= extractSongName(song[i])
authorName = extractAuthorName(song[i])
albumName = extrackAlbumName(song[i])
link = extractLink(song[i])
sOngItem= [songName,authorName,albumName,link]
songList.append(songItem)
index = ''
if i<9:
index = '0' + str(i+1)
else:
index = str(i + 1)
#print(index + ' ' + songName + ' ' + authorName + ' ' + albumName + ' ' + link)
return songList
def main():
while True:
url = 'http://www.google.cn/music/search&#63;q='
key = input('请输入歌曲名字或关键字:')
key = parse.quote(key) #统一编码成utf-8
url += key
mf = request.urlopen(url)
c = mf.readall()
c = str(c,encoding = 'utf-8')
num = extractPageNums(c)
print(str(num+1) + ' pages found')
sOng= extractSongRawData(c)
sOngList= extractSongInfo(song)
#if the result great than 2 pages, then request all pages
if num>0:
for i in range(num):
start = (i+1)*20
next_page = '&cat=song&start=%d'%(start)
#next_page = parse.quote(next_page) #统一编码成utf-8
url += next_page
mf = request.urlopen(url)
c = mf.readall()
c = str(c,encoding = 'utf-8')
sOng= extractSongRawData(c)
songList += extractSongInfo(song) #find all results
for i in range(len(songList)): #print the result
index = ''
if i<9:
index = '0' + str(i+1)
else:
index = str(i + 1)
print(index + ' ' + str(songList[i]))
if __name__ == '__main__':
main()
希望本文所述对大家的Python程序设计有所帮助。
推荐阅读
本文详细介绍如何离线安装Cloudera Manager (CM) 插件,并通过Grafana监控CDH集群的健康状况和资源使用情况。该插件利用CM提供的API接口进行数据获取和展示。 ...
[详细]
蜡笔小新 2024-12-21 17:56:30
2019独角兽企业重金招聘Python工程师标准线性回归算法计算过程CostFunction梯度下降算法多变量回归![选择特征](https:static.oschina.n ...
[详细]
蜡笔小新 2024-12-22 16:09:09
本文详细介绍了如何在Python中编写斐波那契数列,并探讨了不同的实现方法及其性能优化。通过递归、迭代和公式法,读者可以了解每种方法的优缺点,并选择最适合自己的实现方式。 ...
[详细]
蜡笔小新 2024-12-22 18:41:45
本文详细介绍如何使用CSS自定义HTML5视频播放器的样式,涵盖常见属性及跨浏览器兼容性问题。发布时间:2020-09-14 14:46:29;来源:亿速云;阅读量:58;作者:小新。 ...
[详细]
蜡笔小新 2024-12-22 18:36:22
本文详细探讨了 org.apache.hadoop.ha.HAServiceTarget 类中的 checkFencingConfigured 方法,包括其功能、应用场景及代码示例。通过实际代码片段,帮助开发者更好地理解和使用该方法。 ...
[详细]
蜡笔小新 2024-12-22 18:28:35
本文详细介绍了如何将 Python 3.6.3 程序转换为 Windows 可执行文件(.exe),并解决了使用 py2exe 和 cx_Freeze 时遇到的问题。推荐使用 PyInstaller 进行打包,提供完整的安装和打包步骤。 ...
[详细]
蜡笔小新 2024-12-22 17:28:12
本文深入分析了 USDC 的稳定性和可能的救援措施,探讨了在硅谷银行破产后 USDC 面临的风险以及行业内的反应。 ...
[详细]
蜡笔小新 2024-12-22 16:05:49
本文详细介绍了使用Node.js、Express、MongoDB和Socket.io构建的实时聊天应用程序。涵盖项目结构、技术栈选择及关键依赖项的配置。 ...
[详细]
蜡笔小新 2024-12-22 15:31:28
本题来自WC2014,题目编号为BZOJ3435、洛谷P3920和UOJ55。该问题描述了一棵不断生长的带权树及其节点上小精灵之间的友谊关系,要求实时计算每次新增节点后树上所有可能的朋友对数。 ...
[详细]
蜡笔小新 2024-12-22 14:36:54
本文详细介绍了如何为嵌入式应用开发搭建必要的软硬件环境,并提供了通过串口和网线两种方式将文件传输到开发板的具体步骤。适合Linux开发初学者参考。 ...
[详细]
蜡笔小新 2024-12-22 13:38:48
蜡笔小新 2024-12-21 20:41:21
本文探讨了为何相同的HTTP请求在两台不同操作系统(Windows与Ubuntu)的机器上会分别返回200 OK和429 Too Many Requests的状态码。我们将分析代码、环境差异及可能的影响因素。 ...
[详细]
蜡笔小新 2024-12-21 19:35:11
本文将探讨2015年RCTF竞赛中的一道PWN题目——shaxian,重点分析其利用Fastbin和堆溢出的技巧。通过详细解析代码流程和漏洞利用过程,帮助读者理解此类题目的破解方法。 ...
[详细]
蜡笔小新 2024-12-21 18:09:12
本文介绍了如何使用CSS实现网站导航栏中当前页面的高亮显示,提升用户体验。通过为每个页面的body元素添加特定ID,并结合导航项的类名,可以轻松实现这一功能。 ...
[详细]
蜡笔小新 2024-12-21 17:42:25
本期 PyHubWeekly 为大家精选了 GitHub 上五个优秀的 Python 工具,涵盖金融数据可视化、终端美化、国际化支持、图像增强和远程 Shell 环境配置。欢迎关注并参与项目。 ...
[详细]
蜡笔小新 2024-12-21 14:45:11