Python抓取百度音乐。

今天挑战下百度音乐抓取,先用Chrome分析下请求的链接。

最关键的就是这个链接

http://play.baidu.com/data/music/songlink

请求这个带上songid就能返回给你音乐的json,那么怎么来获取songid呢?

点开 http://music.baidu.com/tag,找个标签进去。然后查看页面源码。发现有以下片段。

在每首歌曲的li元素的data-songitem里面恰巧包含我们需要的sid。ok,目标明确了,首先请求百度音乐的音乐标签页,然后获得sid。然后请求

http://play.baidu.com/data/music/songlink

并且带上我们组装好的sid。最后根据返回json获取我们需要的信息。

代码如下(刚学Python,写的不是太好):

#!/usr/bin/python
#coding=utf-8
__author__ = ‘zhm‘
import urllib
import urllib2
import re
from json import *
#
SONG_TAG_URL = ‘http://music.baidu.com/tag/%E7%BB%8F%E5%85%B8%E8%80%81%E6%AD%8C‘
SONG_LINK_URL = ‘http://play.baidu.com/data/music/songlink‘
def getContent(url,pattern):
    try:
        f=urllib2.urlopen(url)
        result =  f.read();
        content = re.compile(pattern, re.DOTALL)
        style = content.search(result)
        if style:
            result = style.group(0)
            return result
        else:
            return None
    except Exception ,e:
        print e

if  __name__=="__main__":
    for i in range(0,1000,25):
        #根据给出的百度音乐分类地址解析出songid
        result = getContent(SONG_TAG_URL+‘?start=‘+unicode(i)+‘&size=25&third_type=0‘,‘<ul>.*?</ul>‘)
        sids = []
        sidPattern = re.findall("&quot;sid&quot;:.*?,&quot;",result)
        for sid in sidPattern:
            sids.append(re.sub(‘,&quot;‘,‘‘,re.sub(‘&quot;sid&quot;:‘,‘‘,sid)))
        # print sids
        #将songid构造成post请求参数
        formdata = { "songIds" : ",".join(sids)}
        data_encoded = urllib.urlencode(formdata)
        # print data_encoded
        songList = urllib2.urlopen(SONG_LINK_URL,data_encoded)
        songListJson = songList.read()
        # print songListJson
         #json 转字典
        song_dict = JSONDecoder().decode(songListJson)
        #获取songList
        song_data_dict = song_dict.get("data").get("songList")
        for sond_data in song_data_dict:
            song_name = sond_data.get(‘songName‘)
            song_artistName = sond_data.get(‘artistName‘)
            song_format = sond_data.get(‘format‘)
            song_link = sond_data.get(‘songLink‘)
            if song_name is None or                             song_artistName is None or                             song_format is None or                             song_link is None:
                continue
            print song_name+‘--‘+song_artistName+‘.‘+song_format+u‘     下载链接为:‘+song_link
            #下载方法此处就省略了。
时间: 2024-08-28 18:36:48

Python抓取百度音乐。的相关文章

手把手教你使用Python抓取QQ音乐数据!

[一.项目目标] 通过手把手教你使用Python抓取QQ音乐数据(第一弹)我们实现了获取 QQ 音乐指定歌手单曲排行指定页数的歌曲的歌名.专辑名.播放链接. 通过手把手教你使用Python抓取QQ音乐数据(第二弹)我们实现了获取 QQ 音乐指定歌曲的歌词和指定歌曲首页热评. 通过手把手教你使用Python抓取QQ音乐数据(第三弹)我们实现了获取更多评论并生成词云图. 此次我们将将三个项目封装在一起,通过菜单控制爬取不同数据. [二.需要的库] 主要涉及的库有:requests.openpyxl.

python抓取百度彩票的双色球数据

最近在学习<机器学习实战>这本书,在学习的过程中不免要自己去实践,写些练习.这写练习的第一步就需要收集数据,所以为了写好自己的练习程序,我得先学会收集一些网络数据.了解到用python抓取网页数据的一些方法后,我就根据别人的demo,自己实践了一下,学着从百度彩票网站上抓取双色球的历史数据.以下我就介绍一下自己的小程序. 大致思路如下 找到相关url和其参数 找出页面上你要抓取的数据的位置,也就是说这个数据在那些标签下 将每页中学要的数据取下来按一定格式存放在自己本地 需要的环境: pytho

使用python抓取百度搜索、百度新闻搜索的关键词个数

由于实验的要求,需要统计一系列的字符串通过百度搜索得到的关键词个数,于是使用python写了一个相关的脚本. 在写这个脚本的过程中遇到了很多的问题,下面会一一道来. ps:我并没有系统地学习过python,只是很久之前用过它,感觉用起来还比较方便,于是这回又把它拾起来使用了.当然这也是考虑到手上有python机器学习的实战书籍,所以估计一段时间后还会再用的缘故. 思路:首先使用python的库函数把网页的内容爬下来,然后使用正则表达式去匹配想要的字符串,最后进行字符串处理就能得到想要的东西了.

用python实现的百度音乐下载器-python-pyqt-改进版

之前写过一个用python实现的百度新歌榜.热歌榜下载器的博文,实现了百度新歌.热门歌曲的爬取与下载.但那个采用的是单线程,网络状况一般的情况下,扫描前100首歌的时间大概得到40来秒.而且用Pyqt做的界面,在下载的过程中进行窗口操作,会出现UI阻塞的现象. 前两天有时间调整了一下,做了几方面的改进: 1.修改了UI界面阻塞的问题,下载的过程中可以进行其它的UI操作; 2.爬虫程序采用一个主线程,8个子线程的方式快速爬取,网络状况一致的情况下,将扫描100首歌曲的时间提高到了8.9秒左右:(本

python爬取百度搜索结果ur汇总

写了两篇之后,我觉得关于爬虫,重点还是分析过程 分析些什么呢: 1)首先明确自己要爬取的目标 比如这次我们需要爬取的是使用百度搜索之后所有出来的url结果 2)分析手动进行的获取目标的过程,以便以程序实现 比如百度,我们先进行输入关键词搜索,然后百度反馈给我们搜索结果页,我们再一个个进行点击查询 3)思考程序如何实现,并克服实现中的具体困难 那么我们就先按上面的步骤来,我们首先认识到所搜引擎,提供一个搜索框,让用户进行输入,然后点击执行 我们可以先模拟进行搜索,发现点击搜索之后的完整url中有一

Python抓取需要cookie的网页

Python抓取需要cookie的网页 在仿照<Python小练习:可视化人人好友关系>一文时,需要登录模拟登录人人网.然而自从CSDN事件之后,人人网开始使用加密方式处理登录名和密码,直接使用post方式已经无法登陆人人网.这时,从豆瓣讨论中找到了解决方法: 1. 首先使用浏览器登陆人人,然后找到浏览器中关于登陆的Cookie: 2. 将Cookie记录下来,在Python中使用cookie模块模拟浏览器的行为: 3. 取得并解析数据. 1. HTTP协议与Cookie 抓取网页的过程跟浏览

爬虫抓取百度贴吧帖子内容

上篇文章已经介绍了抓取糗事百科的段子,这篇文章来抓取百度贴吧帖子内容,涉及到urllib,urllib2,re等模块. 代码实现功能: 1.获取某一个帖子的标题 2.获取帖子回复的所有页数,以及每一页的内容 3.可以只获取楼主的回复(使用数字1声明),或者所有回复(使用数字0声明) 直接使用oop编程的方式编写代码: 代码如下: #!/usr/bin/env python #coding:utf8 import urllib import urllib2 import re #处理页面标签类 c

《一出好戏》讲述人性,使用Python抓取猫眼近10万条评论并分析,一起揭秘“这出好戏”到底如何?

黄渤首次导演的电影<一出好戏>自8月10日在全国上映,至今已有10天,其主演阵容强大,相信许多观众也都是冲着明星们去的.目前<一出好戏>在猫眼上已经获得近60万个评价,评分为8.2分,票房已破10亿. 作者本人(汤小洋 )今天也走进了电影院,对这部电影做了亲身的观看,看完后的感觉是有些许失落的,本以为是喜剧片,结果发现笑点一般,从搞笑的角度来看,不如<西虹市首富>,影片更多的是反映人类本性的一部电影,不应当做喜剧片来看,影片中展现的人与人之间的关系倒是值得我们去深思.

微信好友大揭秘,使用Python抓取朋友圈数据,通过人脸识别全面分析好友,一起看透你的“朋友圈”

微信:一个提供即时通讯服务的应用程序,更是一种生活方式,超过数十亿的使用者,越来越多的人选择使用它来沟通交流. 不知从何时起,我们的生活离不开微信,每天睁开眼的第一件事就是打开微信,关注着朋友圈里好友的动态,而朋友圈中或虚或实的状态更新,似乎都在证明自己的"有趣",寻找那份或有或无的存在感. 有人选择在朋友圈记录生活的点滴,有人选择在朋友圈展示自己的观点.有时我们想去展示自己,有时又想去窥探着别人的生活,而有时又不想别人过多的了解自己的生活,或是屏蔽对方,或是不给对方看朋友圈,又或是不