本文作者:李婷婷 河南大學經濟學院
文字編輯:崔趙雯
技術總編:余術玲
導讀
??前段時間電影院上映了幾部重量級電影,《我和我的家鄉(xiāng)》蒋腮、《姜子牙》藕各、《奪冠》等等,使沉寂已久的電影院又熱鬧了起來激况!不知道大家看了哪一部電影呢?
?《我和我的家鄉(xiāng)》這部電影中的五個故事既有讓大家捧腹大笑的瞬間竭讳,也有讓大家感動落淚的時刻浙踢。今天我們就通過豆瓣電影來看一下《我和我的家鄉(xiāng)》這部電影的評價。在本篇推文中胰舆,我們通過爬取豆瓣電影上《我和我的家鄉(xiāng)》的影評內容并制作詞云圖,讓大家可以直觀看到影評中出現(xiàn)的一些高頻詞匯思瘟。
一滨攻、爬取影評內容
??首先,我們找到豆瓣電影中《我和我的家鄉(xiāng)》光绕,這部電影的影評(網(wǎng)絡鏈接:https://movie.douban.com/subject/35051512/reviews)诞帐,然后查看網(wǎng)頁的源代碼,并觀察源代碼信息停蕉,找到目標信息所在的位置。
??通過觀察菇晃,我們發(fā)現(xiàn)每條影評的標題和鏈接都在同一行蚓挤,而且所在的行都包含</a></h2>
這個標簽。先以第一頁為例估灿,通過正則表達式保留目標信息所在的行缤剧,并提取影評的標題和鏈接。
clear all
cap mkdir D:/影評爬取
cd D:/影評爬取
copy "https://movie.douban.com/subject/35051512/reviews" temp.txt, replace
infix strL v 1-100000 using temp.txt, clear
keep if ustrregexm(v,"</a></h2>")
gen url=ustrregexs(1) if ustrregexm(v,`"<a href="(.*)">"')
replace v =ustrregexra(v,"<.*?>","")
rename v title
??這樣我們就可以得到第一頁當中所有影評的標題和鏈接了司顿,但是影評不止一頁兄纺,所以我們需要先從第一頁的源代碼中提取出影評的總頁數(shù)化漆,之后再遍歷所有頁面進行提取所需要的信息。copy "https://movie.douban.com/subject/35051512/reviews" temp.txt, replace
infix strL v 1-100000 using temp.txt, clear
keep if index(v,`"<span class="thispage" data-total-page="')
replace v=ustrregexs(0) if ustrregexm(v,"(\d+)")
local p=v[1]
??接下來對頁碼進行循環(huán)疙赠,抓取所有頁面的信息,并將每一頁的信息分別保存厌衔,之后再進行合并捍岳。
forvalues i=1/`p'{
local j=(`i'-1)*20
cap copy "https://movie.douban.com/subject/35051512/reviews?start=`j'" temp.txt,replace
while _rc!=0 {
cap copy "https://movie.douban.com/subject/35051512/reviews?start=`j'" temp.txt, replace
}
infix strL v 1-100000 using temp.txt, clear
keep if ustrregexm(v,"</a></h2>")
gen url=ustrregexs(1) if ustrregexm(v,`"<a href="(.*)">"')
replace v =ustrregexra(v,"<.*?>","")
rename v title
save "我和我的家鄉(xiāng)影評_`i'",replace
}
*合并文件
clear
local files:dir "." file "我和我的家鄉(xiāng)影評*.dta"
foreach file in `files' {
append using "`file'"
}
drop if url==""
save "我和我的家鄉(xiāng)影評.dta", replace
??如圖所示锣夹,我們得到了所有影評的標題和影評的鏈接,下一步我們就可以使用這些鏈接進行二次爬蟲抓取影評的內容啦银萍!
gen v=""
forvalues i=1/`=_N' {
sleep 1000
replace v=fileread(url) in `i'
while filereaderror(v[`i'])!=0 {
sleep 5000
replace v=fileread(url) in `i'
}
dis `i'
}
split v,p(`"<div id="link-report">"' `"<div class="main-author">"')
replace v2 = ustrregexra(v2,"\s","",.)
replace v2 = ustrregexra(v2,"<.*?>","",.)
replace v2 = ustrregexra(v2," |©|-|;","")
rename v2 content
keep title content
save "我和我的家鄉(xiāng)影評1.dta",replace
??如圖所示贴唇,我們得到了《我和我的家鄉(xiāng)》這部電影在豆瓣上所有影評的標題和影評的內容。接下來就可以根據(jù)影評內容進行制作詞云圖了~
二豌熄、詞云圖
??我們通過Stata和Python的交互實現(xiàn)對影評內容的分詞處理物咳,因為影評的內容通常較長,而且含有名詞览闰、形容詞等多種詞性,因此崖咨,這里使用jieba.posseg進行分詞油吭,獲得每個詞語的詞性。
use 我和我的家鄉(xiāng)影評1.dta,clear
keep content
export delimited using content.txt,replace
*調用Python分詞
clear all
python
import jieba.posseg
word=[]
with open(r"content.txt",encoding="utf8") as f:
for i in f.readlines():
str=i
word.append(str)
jieba.load_userdict(r"tsdict.txt")
with open("分詞.txt","w",encoding="utf8") as f2:
for unit in word:
seg_list = jieba.posseg.cut(unit)
for word in seg_list:
f2.write(word.word+" "+word.flag+"\n")
end
??將分詞的結果導入到Stata之后歌豺,刪除缺失值心包、單字和停用詞并進行詞頻統(tǒng)計。
import delimited using 分詞.txt, clear encoding("utf-8")
split v1,p(" ")
drop v1
rename (v11 v12) (keyword flag)
drop if ustrlen(keyword) == 1
drop if keyword ==""
preserve
import delimited using 停用詞表.txt, clear encoding("utf-8") varname(nonames)
outsheet using 停用詞表.txt, replace
levelsof v1, local(keyword)
restore
foreach word in `keyword' {
drop if keyword == "`word'"
}
*詞頻統(tǒng)計
bysort keyword:gen frequency = _N
gsort -frequency
duplicates drop
save word,replace
??最后,我們在得到的分詞結果中只保留名詞区宇、動詞和形容詞值戳,并進行詞云圖的繪制。
use word,clear
keep if ustrregexm(flag,"^[anv]")
keep in 1/100
wordcloud keyword frequency using 詞云.html, replace size(15 80) range(3480 2160)
shellout 詞云圖.html
??制作的詞云圖結果如下圖所示:??從詞云圖中可以看出卧晓,“故事”鲫凶、“家鄉(xiāng)”、“北京”波附、“老師”昼钻、“回鄉(xiāng)”這些詞出現(xiàn)的頻率很高。從電影的影評內容也可以看出然评,這部電影喚起了很多人的家鄉(xiāng)情懷。你去電影院看這部電影了嘛盏求?歡迎大家留言交流觀影感受哦~