一、主題式網絡爬蟲設計方案
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很高效率,以后做調查調研更加方便了!