Python爬蟲實戰項目 - QQ音樂韓國榜

項目來由

相信很多人都很喜歡聽音樂,也有自己喜歡的藝人,而我也是如此。但我無法時時人眼監測QQ音樂榜的變化,因此想實作一個web scraping項目, 幫助我事半功倍地蒐集資料。
 

項目紀錄

目標網址:https://i.y.qq.com/n2/m/share/details/toplist.html?ADTAG=newyqq.toplist&type=0&id=16
(*註:因為電腦版只能看到韓國榜的top 20,須將頁面調整為手機板,即可順利爬取)

欲達成目標

- 蒐集QQ音樂韓國榜數據
- 以json格式存入MongoDB

使用Package

import requests
from bs4 import BeautifulSoup
import pymongo

Code

利用requests獲取網頁,並用BeautifulSoup解析網頁內容

url = "https://i.y.qq.com/n2/m/share/details/toplist.html?ADTAG=newyqq.toplist&type=0&id=16"
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')

找到相應tag進行爬取。以下為處理歌曲與上周榜單相比的變化。
rank change為變化的數量,rank position為歌曲是上升(+N)/下降(-N)/持平(-)/NEW(新進)

for item in soup.findAll("li", {"class": "song_list__item"}):
    
#     soup.use['xlink:href']
    
    # 下降/ 上升 /NEW/ 持平
    rank_change = item.svg.use['xlink:href']
    rank_number = item.find("span", {"class": "song_list__index_change"}).getText()
    
    if rank_change == "#icon_rank_down":
        rank_position = "-" + rank_number
    elif rank_change == "#icon_rank_up":
        rank_position = "+" + rank_number
    elif rank_change == "#icon_rank_new":
        rank_position = "NEW"
    else:
        rank_position = "-"

將爬取內容進行整理為以下格式:{歌曲名,榜單名次,榜單升降變化,藝人名}

result = {
        "title": item.find("span", {"class": "song_list__txt"}).getText(),
        "ranking": int(item.find("span", {"class": "song_list__index_num"}).getText()),
        "rank_position": rank_position,
        "artist": item.find("p", {"class": "song_list__desc"}).getText()}

創建一個空list,並將結果append到list上

qq = []
qq.append(result)

print結果如圖:
在这里插入图片描述

設定MongoDB連線

在此以localhost為例,mongodb port = 27017,因此設定為:

#link to mongodb
client = pymongo.MongoClient(host='localhost', port=27017)

並設定好欲儲存之database和collection名稱:

# link to database
db = client['music']
#link to collection
collection = db['Chart']

insert 即儲存成功

collection.insert_one(qq)

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值