如何基于Python爬取隱秘的角落評(píng)論
“一起去爬山吧?”
這句臺(tái)詞火爆了整個(gè)朋友圈,沒錯(cuò),就是來自最近熱門的《隱秘的角落》,豆瓣評(píng)分8.9分,好評(píng)不斷。

感覺還是蠻不錯(cuò)的。同時(shí),為了想更進(jìn)一步了解一下小伙伴觀劇的情況,永恒君抓取了愛奇藝平臺(tái)評(píng)論數(shù)據(jù)并進(jìn)行了分析。下面來做個(gè)分享,給大伙參考參考。
1、爬取評(píng)論數(shù)據(jù)
因?yàn)樵搫∈窃趷燮嫠嚻脚_(tái)獨(dú)播的,自然數(shù)據(jù)源從這里取比較合適。永恒君爬取了《隱秘的角落》12集的從開播日6月16日-6月26日的評(píng)論數(shù)據(jù)。
使用 Chrome 查看源代碼模式,在播放頁(yè)面往下面滑動(dòng),有一個(gè) get_comments 的請(qǐng)求,經(jīng)過調(diào)試分析,這個(gè)接口就是獲取評(píng)論數(shù)據(jù)的接口,后面連接上一系列的參數(shù)即可獲取評(píng)論的數(shù)據(jù)。

其中關(guān)鍵的就是last_id這個(gè)參數(shù),是用來控制評(píng)論分頁(yè)的,需要通過上一個(gè)頁(yè)面最后一條評(píng)論的id來進(jìn)行獲取。
爬蟲部分代碼
def get_comment_html(movieId, movieName, lastId):#將獲取評(píng)論的json源碼,保存到txt文件中
url = "http://sns-comment.iqiyi.com/v3/comment/get_comments.action?"
params = {
"types":"time",
"business_type":"17",
"agent_type":"118",
"agent_version":"9.11.5",
"authcookie":"authcookie"
}
for item in params:
url = url + item + "=" + params[item] + "&"
url = url + "content_id=" + movieId+ "&last_id=" + lastId
#url 為拼接好的評(píng)論地址
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36",
"Accept": "application/json, text/javascript",
"Referer": "https://www.iqiyi.com/v_19rxtiliso.html?vfm=2008_aldbd&fv=p_02_01",
}
response = requests.get(url, headers=headers)
filename = movieId + movieName+".txt"
if response.status_code == 200:
with open(filename,"a",encoding='utf-8') as f:
f.write(response.text+"\n")
#將獲取的評(píng)論json源碼保存到txt文件,一次寫入一行,表示獲取的這一頁(yè)的評(píng)論
else:
print("request error")
print("爬取第{}頁(yè)評(píng)論".format(file_lines(filename)))
time.sleep(0.5)
last_id = parseData(response.text) #解析并獲取下一個(gè)id
if last_id != "End":
get_comment_html(movieId, movieName, parseData(response.text))
else:
print("已到結(jié)尾")
#continue#結(jié)束整個(gè)程序
return None
最終將12集爬取下來的包含評(píng)論數(shù)據(jù)的json源碼保存到txt文件當(dāng)中,解析提取評(píng)論的時(shí)間、用戶名、性別、評(píng)論內(nèi)容等信息,經(jīng)過去重、去空白等數(shù)據(jù)清理工作,最終獲得28010條評(píng)論信息。

2、分析展示數(shù)據(jù)
在海量的數(shù)據(jù)中,我們可以分析出我們想看到的結(jié)果。為了更好的數(shù)據(jù)處理和可視化展示,這里永恒君用了Pandas和Pyecharts 這兩個(gè)庫(kù)。
1)評(píng)論用戶性別方面
女生占了大部分,占比60.89%,比男性用戶要多不少。

2)每一集的評(píng)論數(shù)量
接下來,我們?cè)賮砜匆幌?,每一期的評(píng)論數(shù)量,看是否能夠得出一些不一樣的數(shù)據(jù)。
from pyecharts.charts import Bar ##導(dǎo)入需要使用的圖表
from pyecharts import options as opts ##導(dǎo)入配置項(xiàng)
comment_num3 = df["集數(shù)"].value_counts().sort_index()
x_line3 = comment_num3.index.to_list()
y_line3 = comment_num3.values.tolist()
bar1=(
Bar(init_opts=opts.InitOpts(width='800px', height='350px')) ##定義為柱狀圖
.add_xaxis(x_line3) ##X軸的值
.add_yaxis('評(píng)論數(shù)',y_line3) ##y的值和y的一些數(shù)據(jù)配置項(xiàng)
.set_global_opts(title_opts=opts.TitleOpts(title='《隱秘的角落》1-12集評(píng)論數(shù)量'))
)
bar1.render("bar3.html") ###輸出html文件

除了第一集的評(píng)論數(shù)特別多之外,可以看到,上半段的評(píng)論數(shù)明顯要比下半段的要多,是否意味著大家普遍覺得前期的要更好看一些?

3)開播十天之內(nèi)的評(píng)論數(shù)量走勢(shì)
接下來我們來看看從6月16日開播之后,網(wǎng)友們對(duì)該劇的評(píng)論數(shù)量走勢(shì)情況。
from pyecharts.charts import Line ##導(dǎo)入需要使用的圖表
from pyecharts import options as opts ##導(dǎo)入配置項(xiàng)
comment_num = df["留言時(shí)間"].str.split(' ').str[0].value_counts().sort_index()
x_line1 = [i.replace('2020-','') for i in comment_num.index.to_list()]
y_line1 = comment_num.values.tolist()
# 繪制面積圖
line1 = Line(init_opts=opts.InitOpts(width='1200px', height='600px'))
line1.add_xaxis(x_line1)
line1.add_yaxis('', y_line1,
markpoint_opts=opts.MarkPointOpts(data=[
opts.MarkPointItem(type_='max', name='最大值'),
opts.MarkPointItem(type_='min', name='最小值')
]))
line1.set_global_opts(title_opts=opts.TitleOpts('《隱秘的角落》開播10天內(nèi)評(píng)論走勢(shì)'),
xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate='30')),
#visualmap_opts=opts.VisualMapOpts(max_=12673)
)
line1.set_series_opts(label_opts=opts.LabelOpts(is_show=True),
linestyle_opts=opts.LineStyleOpts(width=2))
line1.render("Line.html")

可以看到,從6月16日開播后,評(píng)論數(shù)量一路走高在6月25日達(dá)到了一個(gè)階段的高點(diǎn)。
4)一天之中大家都在什么時(shí)間段看這部?。?/p>
通過統(tǒng)計(jì)16日-26日每日0-23時(shí)的評(píng)論數(shù)量,來看看大家一般都在什么時(shí)候看劇
from pyecharts.charts import Bar ##導(dǎo)入需要使用的圖表
from pyecharts import options as opts ##導(dǎo)入配置項(xiàng)
comment_num2 = df["留言時(shí)間"].str.split(' ').str[1].str.split(":").str[0].value_counts().sort_index()
x_line2 = comment_num2.index.to_list()
y_line2 = comment_num2.values.tolist()
bar1=(
Bar(init_opts=opts.InitOpts(width='800px', height='350px')) ##定義為柱狀圖
.add_xaxis(x_line2) ##X軸的值
.add_yaxis('評(píng)論數(shù)',y_line2) ##y的值和y的一些數(shù)據(jù)配置項(xiàng)
.set_global_opts(title_opts=opts.TitleOpts(title='《隱秘的角落》0-23時(shí)評(píng)論數(shù)量'))
)
bar1.render("bar2.html") ###輸出html文件

可以看到,晚上20點(diǎn)-23時(shí)為最集中看劇的時(shí)間段,其次中午12-14點(diǎn)也有一波小高峰,總體更多的人是下午看劇的人多。
這是否也是你看劇的時(shí)間段呢?
5)評(píng)論的字?jǐn)?shù)情況
永恒君一般看劇基本都不寫評(píng)論的或者也是簡(jiǎn)單幾個(gè)字,但是在這里,我特地看了一下評(píng)論字?jǐn)?shù)的分布,
def comment_word_group(strings): #評(píng)論字?jǐn)?shù)分組函數(shù)
if len(strings)<=10:
length = 0
elif len(strings) > 10 and len(strings)<=30:
length = 1
elif len(strings) >30 and len(strings) <=50:
length = 2
else:
length = 3
return length
df["留言數(shù)量組別"] = df["留言內(nèi)容"].apply(lambda x:comment_word_group(x))#評(píng)論字?jǐn)?shù)分組
lengthData = df.groupby(['留言數(shù)量組別'])["留言內(nèi)容"].count()#評(píng)論字?jǐn)?shù)分組統(tǒng)計(jì)
from pyecharts.charts import Bar ##導(dǎo)入需要使用的圖表
from pyecharts import options as opts ##導(dǎo)入配置項(xiàng)
attr = ["10字以內(nèi)","10~30字","30~50字","50字以上"] #X軸
v1 = lengthData.values.tolist() #Y軸
bar1=(
Bar(init_opts=opts.InitOpts(width='800px', height='350px')) ##定義為柱狀圖
.add_xaxis(attr) ##X軸的值
.add_yaxis('評(píng)論數(shù)量',v1) ##y的值和y的一些數(shù)據(jù)配置項(xiàng)
.set_global_opts(title_opts=opts.TitleOpts(title='《隱秘的角落》評(píng)論字?jǐn)?shù)分布'))
)
bar1.render("bar.html") ###輸出html文件

絕大部分的評(píng)論字?jǐn)?shù)都是在10個(gè)字以內(nèi),但也有約25%的評(píng)論字?jǐn)?shù)在10-30個(gè)之內(nèi),還是讓永恒君有點(diǎn)意外,是否說明該劇火爆也是有原因的,激起了不少伙伴的共鳴。
6)評(píng)論核心關(guān)鍵詞
最后,永恒君將通過wordcloud庫(kù)制作詞云來看看,大家對(duì)該劇的整體評(píng)價(jià),以及該劇的核心關(guān)鍵詞。
#詞云
from PIL import Image
from wordcloud import WordCloud,ImageColorGenerator,STOPWORDS
import jieba
import matplotlib.pyplot as plt
import numpy as np
contents = df["留言內(nèi)容"].str.cat(sep=" ")
contents
sw = set(STOPWORDS)
sw.add("這個(gè)")
sw.add("什么")
cut_text2 = " ".join(jieba.lcut(contents))
background_image = np.array(Image.open("bg.png"))
wc = WordCloud(font_path=r'C:\Windows\Fonts\simhei.ttf',
background_color='White',
max_words=3000,
width=1000,
height=500,
scale=1,
stopwords=sw,#停用詞
mask = background_image
)
#font_path:設(shè)置字體,max_words:出現(xiàn)的最多詞數(shù)量,mask參數(shù)=圖片背景,必須要寫上,另外有mask參數(shù)再設(shè)定寬高是無效的
wc.generate(cut_text2)
wc.to_file("a2.jpg")
#將圖繪制出來
plt.imshow(wc)
plt.axis("off")
plt.show()

可以看到,“朝陽(yáng)”、“嚴(yán)良”、“張東升”、“普普”、“好看”、“喜歡”、“小孩”、“原著”等關(guān)鍵詞都是大伙在熱議的。
不得不說,近年來如此火熱的、而且質(zhì)量不錯(cuò)的國(guó)產(chǎn)劇確實(shí)不多了。永恒君看前幾集的時(shí)候,突然又有大學(xué)時(shí)候看《越獄》的那個(gè)味道,看了一集就想看下一集,停不下來。
如果你現(xiàn)在還沒有來得及看,建議抽個(gè)時(shí)間去看看吧~~~
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- python 爬取京東指定商品評(píng)論并進(jìn)行情感分析
- python爬取晉江文學(xué)城小說評(píng)論(情緒分析)
- 利用Python網(wǎng)絡(luò)爬蟲爬取各大音樂評(píng)論的代碼
- 詳解用python實(shí)現(xiàn)爬取CSDN熱門評(píng)論URL并存入redis
- python 利用百度API進(jìn)行淘寶評(píng)論關(guān)鍵詞提取
- python 爬取騰訊視頻評(píng)論的實(shí)現(xiàn)步驟
- python爬取微博評(píng)論的實(shí)例講解
- python實(shí)現(xiàn)模擬器爬取抖音評(píng)論數(shù)據(jù)的示例代碼
- Python實(shí)現(xiàn)爬取并分析電商評(píng)論
- python 爬取馬蜂窩景點(diǎn)翻頁(yè)文字評(píng)論的實(shí)現(xiàn)
- mysql實(shí)現(xiàn)外連接方式
- python 爬取華為應(yīng)用市場(chǎng)評(píng)論
相關(guān)文章
Python自動(dòng)巡檢H3C交換機(jī)實(shí)現(xiàn)過程解析
這篇文章主要介紹了Python自動(dòng)巡檢H3C交換機(jī)實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
Python+tkinter實(shí)現(xiàn)制作文章搜索軟件
無聊的時(shí)候做了一個(gè)搜索文章的軟件,有沒有更加的方便快捷不知道,好玩就行了。軟件是利用Python和tkinter實(shí)現(xiàn)的,感興趣的可以嘗試一下2022-10-10
IDEA創(chuàng)建python項(xiàng)目詳細(xì)圖文教程
在開始編寫Python代碼之前,需要在IDEA中配置Python環(huán)境,下面這篇文章主要給大家介紹了關(guān)于IDEA創(chuàng)建python項(xiàng)目的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-10-10
Python 調(diào)用有道翻譯接口實(shí)現(xiàn)翻譯
這篇文章主要介紹了Python 調(diào)用有道翻譯接口實(shí)現(xiàn)翻譯,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03
使用Pycharm創(chuàng)建一個(gè)Django項(xiàng)目的超詳細(xì)圖文教程
Django是比較經(jīng)典的Python web框架,最近剛好在項(xiàng)目中用到了Django,所以下面這篇文章主要給大家介紹了關(guān)于使用Pycharm創(chuàng)建一個(gè)Django項(xiàng)目的超詳細(xì)圖文教程,文中介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08

