分享一个python爬虫程序,抓取千千音乐热榜

本文是分享小程序,不是教程,若要真的自己实现,还需要去分析网页,而由于分析网页的过程比较复杂,这里不再赘述

该小程序涉及到requests库,beatifulsoup库,json库,以及文件储存,详细请参考代码

import requests  #导入requests库,用于发送get请求
from bs4 import BeautifulSoup #从bs4中导入BeautifulSoup库
import json #导入json
import re

url_main = 'http://music.taihe.com/top/dayhot' #千千音乐热歌榜地址
req = requests.get(url_main)
soup = BeautifulSoup( req.text, 'html.parser')#进行网站解析
span = soup.find_all( 'span', 'music-icon-hook')#获取网站span并且class为music-icon-hook的标签
song_id = [] #一个列表,用于存取音乐id
for s in span:
    data = s.get('data-musicicon')#获取每个标签的data-musicicon属性
    json_song = json.loads(data) #转换成字典
    song_id .append(json_song['id'])#获取音乐id

song_id = set(song_id)#将获取到的id去重复,即转化成集合

#遍历id
for song_id_one in song_id:
    url_json = 'http://musicapi.taihe.com/v1/restserver/ting?method=baidu.ting.song.playAAC&format=jsonp&callback=jQuery172039336038036257137_1558266486065&songid={}&from=web&_=1558266489478'
    #分析网页得到的音乐数据的json地址的公共部分,不同部分用{}代替
    js = requests.get (url_json.replace( '{}', song_id_one ))
     #分别取请求每个id的json

    jsonData = json.loads( js.text[42:-2] )#获取有效的json部分,并转化成字典形式
    song_fileName = '{}.mp3'.replace('{}', jsonData['songinfo']['title'])#获取歌名
    print('正在下载 {}'.replace( '{}', song_fileName))#提示信息
    song_url = jsonData['bitrate']['file_link']#获取每首音乐的url

    req_music = requests.get ( song_url )#请求url

   #将返回的音乐转换成二进制储存
    with open( song_fileName,'wb' ) as f:
        f.write ( req_music.content )

分享一个python爬虫程序,抓取千千音乐热榜_第1张图片
分享一个python爬虫程序,抓取千千音乐热榜_第2张图片

你可能感兴趣的:(分享一个python爬虫程序,抓取千千音乐热榜)