Python爬取蝦米音樂排行榜


一、主題式網絡爬蟲設計方案

1.網絡爬蟲名稱:Python爬取蝦米音樂排行榜

 

2.網絡爬蟲爬取的內容與數據特征分析:爬取玩家評論的數據,分析各類數據之間的特征與關系

3.網絡爬蟲設計方案概述:

思路:爬取數據分析html頁面,標記需要的數據標簽,對數據提取、處理、可視化、繪制圖形、保存數據

 

二、主題頁面的結構特征分析

1主題頁面的結構與特征分析:

需要爬的內容如下:

 以  https://www.xiami.com/billboard/306

為例:

 

 

 

2、頁面解析:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

三、網絡爬蟲程序設計

1.數據爬取與采集:

 

獲取網頁數據:

 

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import requests

#獲取蝦米網頁數據
def getHtml(url):
    try:
        # 偽裝UA
        ua = {'user-agent': 'Mozilla/5.0 Chrome/79.0.3945.88 Safari/537.36'}
        # 讀取網頁
        r = requests.get(url, headers=ua)
        # 獲取狀態
        r.raise_for_status()
        # 打印數據 print(r.text)
        # 返回數據
        return r.text
    except:
        return "Fail"

 

 

 

數據分析:

from bs4 import BeautifulSoup

def parseHtml(html):
    # 數據數組
    datas = []
    # 結構解析
    soup = BeautifulSoup(html, "html.parser")
    # 獲取排名
    ids = soup.select('.em.index')
    # 組號
    i = 0
    # 循環排名號
    for id in ids:
        # 字典
        data = {}
        # 獲取編號
        idd = id.get_text()
        # 打印數據
        print(idd)
        # 獲取歌曲名
        titles = soup.select('.song-name.em')[i].get_text()
        # 打印數據
        print(titles)
        # 獲取歌手
        songer = soup.select('.singers.COMPACT')[i].get_text()
        # 打印數據
        print(songer)
        # 獲取專輯
        album = soup.select('.album')[i].get_text()
        # 打印數據
        print(album)
        # 獲取時長
        duration = soup.select('.duration')[i].get_text()
        # 打印數據
        print(duration)
        # 數組
        i = i + 1
        # 加入字典
        data['#'] = idd
        data['歌曲'] = titles
        data['歌手'] = songer
        data['專輯'] = album
        data['時長'] = duration
        # 加入數組
        datas.append(data)
    # 返回數組
    return datas

 

寫入Excle表格,分析數據更方便:

import records

# 初始化組件
results = records.RecordCollection(iter(list))
# 文件流
with open('list.xlsx', 'wb') as f:
# 寫入
f.write(results.export('xlsx'))

 

運行結果:

 

 

 

 

完整代碼

 

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import requests
from bs4 import BeautifulSoup
import records


def getHtml(url):
    '''
    獲取目標網頁數據
    '''
    try:
        # 偽裝UA
        ua = {'user-agent': 'Mozilla/5.0'}
        # 讀取網頁
        r = requests.get(url, headers=ua)
        # 獲取狀態
        r.raise_for_status()
        # 打印數據 print(r.text)
        # 返回數據
        return r.text
    except:
        return "Fail"


def parseHtml(html):
    # 數據數組
    datas = []
    # 結構解析
    soup = BeautifulSoup(html, "html.parser")
    # 獲取排名
    ids = soup.select('.em.index')
    # 組號
    i = 0
    # 循環排名號
    for id in ids:
        # 字典
        data = {}
        # 獲取編號
        idd = id.get_text()
        # 打印數據
        print(idd)
        # 獲取歌曲名
        titles = soup.select('.song-name.em')[i].get_text()
        # 打印數據
        print(titles)
        # 獲取歌手
        songer = soup.select('.singers.COMPACT')[i].get_text()
        # 打印數據
        print(songer)
        # 獲取專輯
        album = soup.select('.album')[i].get_text()
        # 打印數據
        print(album)
        # 獲取時長
        duration = soup.select('.duration')[i].get_text()
        # 打印數據
        print(duration)
        # 鏈接 .song-name.em > a
        a = 'https://www.xiami.com' + soup.select('.song-name.em > a')[i].get('href')
        # 打印數據
        print(a)
        # 數組
        i = i + 1
        # 加入字典
        data['#'] = idd
        data['歌曲'] = titles
        data['歌手'] = songer
        data['專輯'] = album
        data['時長'] = duration
        data['鏈接'] = a
        # 加入數組
        datas.append(data)
    # 返回數組
    return datas


def main():
    # url
    url = "https://www.xiami.com/billboard/306"
    # 獲取網頁數據
    html = getHtml(url)
    # 解析網頁結構
    list = parseHtml(html) 
    # 初始化組件
    results = records.RecordCollection(iter(list))
    # 文件流
    with open('list.xlsx', 'wb') as f:
        # 寫入
        f.write(results.export('xlsx'))

main()

 

 

四、結論(10分)

對本次程序設計任務完成的情況做一個簡單的小結。

 python很高效率,以后做調查調研更加方便了!

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM