养家之人:原来和平如此珍贵!Stata豆瓣影评爬取并画词云图

《养家之人》

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

请珍惜和平。有些人,活着已经用尽全力了。

片子看的太压抑了。眼泪止不住往下流。

此生不悔入华夏。庆幸自己生活在和平国家。

 

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值