《养家之人》
20年后约定在海边相见。
--那时候我都认不出你了。
--你可以把蓝宝石高价卖给我。
今天看了《养家之人》,十分触动。
所以爬了下豆瓣影评并且画了个词云图来看看。
*豆瓣影评
*一、单个网页获取时间、链接、标题
*infix读入
clear
cap mkdir "G:/豆瓣影评" //创建目标文件夹
cd "G:/豆瓣影评" //更改当前工作路径到此文件夹
copy "https://movie.douban.com/subject/26346327/reviews?start=0" temp.txt,replace //把网页源代码拷贝到temp.txt中 注意这里替换一下数字
infix strL v 1-100000 using temp.txt, clear //读入到当前dta里
preserve //保留原来的数据文件
keep if index(v,`"<span content=""') //保留包含<span content="的行
replace v=ustrregexra(v,"<.*?>","") //把<>之间的内容替换为空
rename v time //重命名v为time
save time.dta,replace //保存为time.dta
restore //恢复到preserve之前的数据状态
keep if index(v,`"<h2><a href="') //保留包含<h2><a href="的行
split v,p(`"""') //用双引号作为分隔符分割
rename v2 url //重命名v2为url
split v3,p(">") //用>作为分隔符分割
split v32,p("<") //用<作为分隔符分割
rename v321 title //重命名v321为title
keep url title //保留url、title两个变量
merge using time //将当前数据和time进行合并
drop _merge //删除_merge
save "影评p1.dta",replace //保存为影评p1.dta
*二、评论内容单网页
*fileread读入
clear
cap mkdir "G:/豆瓣影评/二次爬虫" //创建目标文件夹
cd "G:/豆瓣影评/二次爬虫" //更改当前工作路径到此文件夹
use "G:\豆瓣影评\影评p1.dta",clear
gen v=""
forvalues i=1/`=_N'{
replace v=fileread(url) in `i' //把网页源代码拷贝到v中
while filereaderror(v[`i'])!=0 {
sleep 5000 //休息5000毫秒
replace v=fileread(url) in `i'
}
}
split v,p(`"<div id="link-report">"' `"<div class="copyright">"') //把v按照指定分隔符分割
keep v2
replace v2 = ustrregexra(v2,"\s","",.) //删去v2中的空白符
replace v2 = ustrregexra(v2, "<.*?>", "",.) //把<>之间的内容替换为空
rename v2 content //将v2重命名为content
save "影评内容p1.dta",replace //保存为“影评内容p1.dta”
*三、多网页
clear
cap mkdir "G:/豆瓣影评"
cd "G:/豆瓣影评"
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]
forvalues i=1/`p'{
local j=(`i'-1)*20 //定义评论对应的数字编码
cap copy "https://movie.douban.com/subject/26346327/reviews?start=`j'" temp.txt,replace
infix strL v 1-100000 using temp.txt,clear
preserve
keep if index(v,`"<span content=""')
replace v=ustrregexra(v,"<.*?>","")
rename v time
save time.dta,replace
restore
keep if index(v,`"<h2><a href="')
split v,p(`"""')
rename v2 url
split v3,p(">")
split v32,p("<")
rename v321 title
keep url title
merge using time
drop _merge
*cap erase "影评`i'.dta"
save "影评`i'.dta",replace //第i条评论对应的url、title、time保存为影评i.dta
}
clear
cap erase 影评p1.dta
local files:dir "." file "影评*.dta"
foreach file in `files'{
append using "`file'" //把上面生成的影评i.dta合并起来
}
save "影评.dta",replace
gen v=""
forvalues i=1/`=_N'{
replace v=fileread(url) in `i'
while filereaderror(v[`i'])!=0 {
sleep 5000 //休息5000毫秒
replace v=fileread(url) in `i'
}
}
split v,p(`"<div id="link-report">"' `"<div class="copyright">"')
keep v2
replace v2 = ustrregexra(v2,"\s","",.)
replace v2 = ustrregexra(v2, "<.*?>", "",.)
rename v2 content
merge using "影评.dta" //将当前数据和"影评.dta"合并
drop _merge
order (time url title content)
save "影评.dta",replace //保存为影评.dta
*四、画词云图
*分词处理
*导出为txt文档
use 影评.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,并删除单字、缺失值、停用词
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 nonames noquote
levelsof v1, local(keyword)
restore
foreach word in `keyword' {
drop if keyword == "`word'" //删除停用词
}
*词频统计
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(3840 2160)
shellout 词云.html
注:此处调用python要求stata版本为16. 如不满足,可以将中间一段程序放进python中进行。
最后生成的词云图
五、有希望,才能活下去。
帕瓦那的朋友特丽华的愿望是去海边。
在漫天沙尘的阿富汗,她想要去水蓝蓝的海边,踩着软软的沙子,高价卖蓝宝石,只为自己。
希望20年后,他们真的能在海边重逢。在海水拉起月亮的地方。
六、end
请珍惜和平。有些人,活着已经用尽全力了。
片子看的太压抑了。眼泪止不住往下流。
此生不悔入华夏。庆幸自己生活在和平国家。