97色精品视频在线观看免费,日韩欧美亚洲每日更新网,国产精品色婷婷99久久精品,99e热久久免费精品首页

Python 采集 QQ音樂 熱歌榜首數據

2021-11-03 14:21:46 shuai.chang
今天給大家帶來用python采集QQ音樂的熱評~

睿智創新RAIZ,一體化IT服務提供商

我們可以看到這首歌曲的評論有10881條,不愧是榜首熱歌,評論比較高。

一.初步測試


我們首先使用selenium測試一下環境:

from selenium import webdriver
import time

url = 'https://y.qq.com/n/ryqq/songDetail/0006wgUu1hHP0N'

driver = webdriver.Chrome()

driver.get(url)

time.sleep(1)

driver.maximize_window()


截圖如下:

睿智創新RAIZ,一體化IT服務提供商


測試后發現沒有問題。

注意:為了避免登錄,使用谷歌模擬登錄之前最好手動登錄QQ音樂,瀏覽器記錄了cookie信息,比較穩妥。

二.頁面分析


睿智創新RAIZ,一體化IT服務提供商


通過分析頁面可以知道評論數據是類似于瀑布流布局,頁面數據會隨著右側滾動條的滾動被加載出來,換句話說,頁面的url沒有改變,我們要通過selenium控制滾輪操作頁面,獲取更多數據,然后我們看下評論數據在頁面中對應的標簽元素。


如下圖所示:

睿智創新RAIZ,一體化IT服務提供商


我們可以看到一條評論就是一條li標簽,那么由此可以確定數據采集思路:通過selenium控制滾輪滑到頁面底部,然后經過短暫的時間(數據加載完全)后,實時監測頁面的li標簽數目(也就是評論數目),達到了目標數目之后進行數據解析和數據存儲。

三.滾輪操作


通過循環的滾輪操作(控制滾輪到頁面底部),來加載數據。

num = int(input('請輸入目標評論數:')) # 控制采集評論數量(由自己掌控)

_single = True

while _single:
    # items:頁面評論數據
    items = driver.find_elements_by_xpath("//li[@class='comment__list_item c_b_normal']")
    print(len(items))
    if len(items) < num: # 通過頁面監測評論數量,與目標數量對比
        # 拖動滾動條至底部
        driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
        time.sleep(2) # 等待2s,數據加載完全
    else:
        _single = False # 退出循環

.解析頁面


通過觀察頁面li標簽下的內容:

睿智創新RAIZ,一體化IT服務提供商


我們的目標就是要爬取每個用戶的頭像鏈接,昵稱,評論時間和評論內容。

info_list = []
for index,item in enumerate(items):
    dic = {}
    try: # 以防萬一,try語句,便于爬蟲進行
        headPortraits = item.find_element_by_xpath("./div[1]/a/img").get_attribute('src'
        # 頭像圖片鏈接
        name = item.find_element_by_xpath("./div[1]/h4/a").text  # 昵稱
        time = item.find_element_by_xpath("./div[1]/div[1]").text # 評論時間
        content = item.find_element_by_xpath("./div[1]/p/span").text # 評論內容
        content = content.replace(' ','')
        # 因為考慮到有的用戶評論較長,所以需要將換行符改成空格或者空字符,便于存儲

        dic['headPor'] = headPortraits
        dic['name'] = name
        dic['time'] = time
        dic['cont'] = content
        print(index+1)
        print(dic)
        info_list.append(dic)
       
    except Exception as e:
        print(e)


最后再運行的過程中,try語句還是有用的,因為數據沒有爬取完全,有的數據有問題,如下所示:

睿智創新RAIZ,一體化IT服務提供商

五.數據存儲


由于在上面我們把每一條評論數據以字典的形式保存在info_list的列表中,所以這里我們使用csv模塊,把數據寫入到csv文件中。

import csv

head = ['headPor','name','time','cont']
with open('bscxComment.csv', 'w', encoding='utf-8', newline='') as f:
    writer = csv.DictWriter(f, head)
    writer.writeheader()
    writer.writerows(info_list)
    print('寫入成功')

六.運行程序


開始:

睿智創新RAIZ,一體化IT服務提供商


結束:

睿智創新RAIZ,一體化IT服務提供商


然后我們打開csv文件:

睿智創新RAIZ,一體化IT服務提供商


好的,大致就是這樣的5000條評論數據。

七.詞云展示

一.導入相關庫

# 導入相應的庫
import jieba
from PIL import Image
import numpy as np
import pandas as pd
from wordcloud import WordCloud

二.得到評論數據

注意:這里需要對評論那一列數據進行數據清洗,因為可能有的數據類型不是str,需要跳過,或者剔除

with open('data.txt',encoding='utf-8',mode='a') as f:

    for item in data['cont']:
        if type(item) != str:
            continue
        else:
            f.write(item,)
    print('寫入成功!')

三.詞云展示

# 入文本數據并進行簡單的文本處理
# 去掉換行符和空格
text = open("./data.txt",encoding='utf-8').read()

# 分詞,返回結果為詞的列表
text_cut = jieba.lcut(text)
# 將分好的詞用某個符號分割開連成字符串
text_cut = ' '.join(text_cut)


word_list = jieba.cut(text)
space_word_list = ' '.join(word_list)
# print(space_word_list)
# 調用包PIL中的open方法,讀取圖片文件,通過numpy中的array方法生成數組
mask_pic = np.array(Image.open("./cat.png"))
word = WordCloud(
    font_path='C:/Windows/Fonts/simfang.ttf'# 設置字體,本機的字體
    mask=mask_pic,  # 設置背景圖片
    background_color='white'# 設置背景顏色
    max_font_size=150# 設置字體最大值
    max_words=2000# 設置最大顯示字數
    stopwords={'的'# 設置停用詞,停用詞則不在詞云途中表示
                ).generate(space_word_list)
image = word.to_image()
word.to_file('bsx.png'# 保存圖片
image.show()


最后運行:

睿智創新RAIZ,一體化IT服務提供商

八.總結


本文使用selenium采集QQ音樂評論數據,其實使用selenium模擬人操作瀏覽器,可以避免一些反爬,不失為一種獲取數據的好方法,但是需要注意的點還是有的,最后感興趣的小伙伴可以去嘗試一下。




我要咨詢
主站蜘蛛池模板: 吴旗县| 南郑县| 宣威市| 汝阳县| 光泽县| 治多县| 余干县| 行唐县| 衡阳市| 东台市| 墨竹工卡县| 甘谷县| 德兴市| 日喀则市| 德化县| 昆明市| 二连浩特市| 江口县| 南宫市| 固始县| 安顺市| 静海县| 宝清县| 罗定市| 大理市| 松原市| 高密市| 贺州市| 华阴市| 两当县| 安新县| 榆树市| 东海县| 胶南市| 长葛市| 宁南县| 县级市| 九龙城区| 平顺县| 景谷| 靖州|