春節(jié)電影聽巳月說都還可以,我不信,我覺得還是要看看看過的觀眾怎么說,于是我點開了流浪地球2 …
看起來好像不錯的樣子,8.2的評分,三十多億的票房
就是這評價也太多了,那我們今天就把網(wǎng)友對它的評論獲取下來,做成可視化詞云圖看看大家討論最多的是什么。
使用的環(huán)境
Python 3.8 解釋器
Pycharm 編輯器
需要手動安裝的模塊
parsel 數(shù)據(jù)解析模塊
requests 數(shù)據(jù)請求模塊
在cmd直接pip安裝即可
一、數(shù)據(jù)來源分析
1、明確需求()
采集的網(wǎng)站是什么?
采集的數(shù)據(jù)是什么?
2、抓包分析相關(guān)數(shù)據(jù)來源
通過瀏覽器自帶開發(fā)者工具進行抓包分析
打開開發(fā)者工具: F12 或者 鼠標(biāo)右鍵點擊檢查選擇network
刷新網(wǎng)頁: 讓本網(wǎng)頁的數(shù)據(jù)內(nèi)容重新加載一遍
關(guān)鍵字搜索: 通過關(guān)鍵字<要的數(shù)據(jù)>, 搜索查詢相對應(yīng)的數(shù)據(jù)包
二. 代碼實現(xiàn)步驟
基本四大步驟
發(fā)送請求:模擬瀏覽器對于url地址發(fā)送請求
獲取數(shù)據(jù):獲取服務(wù)器返回響應(yīng)數(shù)據(jù)
開發(fā)者工具 --> response
解析數(shù)據(jù):提取我們想要的數(shù)據(jù)內(nèi)容
評論相關(guān)數(shù)據(jù)
保存數(shù)據(jù):把數(shù)據(jù)內(nèi)容保存表格文件里面
發(fā)送請求,模擬瀏覽器對于url地址發(fā)送請求
for page in range(0, 200, 20):
# 請求鏈接
url = f'https://movie.douban.com/subject/35267208/comments?start={page}&limit=20&status=P&sort=new_score'
# 偽裝模擬
headers = {
# User-Agent 用戶代理, 表示瀏覽器基本身份標(biāo)識
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
}
# 發(fā)送請求
response = requests.get(url=url, headers=headers)
print(response)
獲取數(shù)據(jù), 獲取服務(wù)器返回響應(yīng)數(shù)據(jù)。
print(response.text)
解析數(shù)據(jù),提取我們想要的數(shù)據(jù)內(nèi)容。
把獲取下來html字符串?dāng)?shù)據(jù) <response.text>, 轉(zhuǎn)成可解析對象
selector = parsel.Selector(response.text)
# 第一次提取, 所有div標(biāo)簽
divs = selector.css('div.comment-item')
# for循環(huán)遍歷, 把列表里面元素一個一個提取出來
for div in divs:
name = div.css('.comment-info a::text').get() # 昵稱
rating = div.css('.rating::attr(title)').get() # 推薦
date = div.css('.comment-time::attr(title)').get() # 時間
area = div.css('.comment-location::text').get() # 地區(qū)
votes = div.css('.votes::text').get() # 有用
short = div.css('.short::text').get().replace('\n', '') # 評論
# 數(shù)據(jù)存字典里面
dit = {
'昵稱': name,
'推薦': rating,
'時間': date,
'地區(qū)': area,
'有用': votes,
'評論': short,
}
寫入數(shù)據(jù)
csv_writer.writerow(dit)
print(name, rating, date, area, votes, short)
創(chuàng)建文件對象
f = open('data10.csv', mode='a', encoding='utf-8-sig', newline='')
csv_writer = csv.DictWriter(f, fieldnames=[
'昵稱',
'推薦',
'時間',
'地區(qū)',
'有用',
'評論',
])
寫入表頭
csv_writer.writeheader()
代碼僅做參考,完整代碼、詳細(xì)視頻講解直接在這個Q群 708525271 領(lǐng)取就好了
import pandas as pd
import jieba
import wordcloud
df = pd.read_csv('data10.csv')
df.head()
info_list = df['評論'].to_list()
string = ' '.join(jieba.lcut(''.join(info_list)))
string
wc = wordcloud.WordCloud(
width=1000,
height=700,
background_color='white',
font_path='msyh.ttc',
scale=15,
)
wc.generate(string)
wc.to_file('1.png')
evaluate_num = df['推薦'].value_counts().to_list()
evaluate_type = df['推薦'].value_counts().index.to_list()
import pyecharts.options as opts
from pyecharts.charts import Pie
data_pair = [list(z) for z in zip(evaluate_type, evaluate_num)]
data_pair.sort(key=lambda x: x[1])
c = (
Pie(init_opts=opts.InitOpts(bg_color='#2c343c'))
.add(
series_name='豆瓣影評',
data_pair=data_pair,
rosetype='radius',
radius='55%',
center=['50%', '50%'],
label_opts=opts.LabelOpts(is_show=False, position='center'),
)
.set_global_opts(
title_opts=opts.TitleOpts(
title='推薦分布',
pos_left='center',
pos_top='20',
title_textstyle_opts=opts.TextStyleOpts(color='#fff'),
),
legend_opts=opts.LegendOpts(is_show=False),
)
.set_series_opts(
tooltip_opts=opts.TooltipOpts(
trigger='item', formatter='{a} <br/>: {c} (c9ozetgccsir%)'
),
label_opts=opts.LabelOpts(color='rgba(255, 255, 255, 0.3)'),
)
)
c.render_notebook()
詞云圖
餅狀圖
好了今天的分享就到這,大家快去試試吧,下次見!
聯(lián)系客服