重磅新命令:songbl—利用搜索自己收藏的stata帖子
2021-01-01 本文已影响0人
松柏林stata
前言
互联网上stata资源非常丰富,包括许多大牛写的stata技术博客,以及众多“好事者”热心回复的帖子,例如连享会、爬虫俱乐部,以及经管之家stata板块等等。我们收藏了数以千计的stata文章与跟帖资源,等我们遇到问题浏览帖子的时候,需要根据问题利用关键字搜索收藏的stata文章。
收藏文章放置
我收藏的stata文章 放在简书上,简书文章可以不断地编辑,有助于随时更新收藏到新的stata文章。文章收藏固定为:网址与标题,这样有利于之后抓取与分析。
收藏文章方式
1.手工收集
手工收集的优点是可以挑选优质且适合自己的文章,文章标题可以更改为与文章内容更加相一致,以方便之后关键词精准搜索。缺点不言而喻,手工收集不利于大规模操作。
2.爬虫收集
优点自然是速度快,规模大,但是文章质量可能参差不齐。适合抓取一些优质博主的文章,例如连享会。
命令程序
capture program drop songbl
program define songbl
version 10.0
args arg1 arg2 arg3 arg4 arg5
preserve
qui{
cap copy "https://www.jianshu.com/p/5dd37c991717" temp.txt, replace //抓取文章放置地方的网页源代码
infix strL v 1-100000 using temp.txt, clear //导入网页源代码
keep if index(v,"http")
drop in -1
drop in 1
gen a=strmatch(v,"*jianshu*" ) //来自简书的文章
gen b=strmatch(v,"*weixin*" ) //来自微信公众号的文章
gen c=strmatch(v,"*lianxh*" ) //来自连享会的文章
gen d=strmatch(v,"*sina*" ) //来自新浪博客的文章
gen e=strmatch(v,"*ershicimi*" ) //来自次幂数据的文章
gen f=strmatch(v,"*zhihu*" ) //来自知乎的文章
gen g=strmatch(v,"*pinggu*") //来自经管之家的文章
replace a=2 if b==1
replace a=3 if c==1
replace a=4 if d==1
replace a=5 if e==1
replace a=6 if f==1
replace a=7 if g==1
gen 网址=substr(v,1,38) if a==1 //文章链接
gen 标题=substr(v,39,.) if a==1 //文章标题
replace 网址=substr(v,1,49) if a==2
replace 标题=substr(v,50,.) if a==2
replace 网址=substr(v,1,45) if a==3
replace 标题=substr(v,46,.) if a==3
replace 网址=substr(v,1,52) if a==4
replace 标题=substr(v,53,.) if a==4
replace 网址=substr(v,1,60) if a==5
replace 标题=substr(v,61,.) if a==5
replace 网址=substr(v,1,38) if a==6
replace 标题=substr(v,39,.) if a==6
split v, p("+") //由于经管之家不同板块帖子链接不固定,需要事先利用"+"把文章网址与标题隔开
replace 网址 =v1 if a==7
replace 标题 =v2 if a==7
gen 标题1 = lower(标题) //标题字母改为小写,后面搜索只支持小写字母
gen yjy1=strmatch(标题1,"*`arg1'*")
gen yjy2=strmatch(标题1,"*`arg2'*")
gen yjy3=strmatch(标题1,"*`arg3'*")
gen yjy4=strmatch(标题1,"*`arg4'*")
gen yjy5=strmatch(标题1,"*`arg5'*")
}
if "`arg1'"=="" {
local n=_N
dis `"{browse "https://www.jianshu.com/p/5dd37c991717": 数据库}一共收集了`n'篇文章
}
else if "`arg1'"!="" & "`arg2'"=="" {
qui keep if yjy1==1
if _N==0{
dis as error `"没有搜到{`arg1'}相关的内容,请重新输入"'
dis ""
dis as error `"请注意:不支持大写关键词的推文超链接搜索"'
exit
}
local n=_N
dis " 共搜到`n'篇文章-->> "
else{
local j =_N
forval i = 1/`j' {
local q=网址[`i']
local w=标题[`i']
dis `"{browse "`q'": `w'}"'
}
}
}
else if "`arg1'"!="" & "`arg2'"!="" & "`arg3'"=="" {
qui keep if yjy1==1 & yjy2==1
if _N==0{
dis as error `"没有搜到{`arg1' `arg2'}相关的内容,请重新输入"'
dis ""
dis as error `"请注意:不支持大写关键词的推文超链接搜索"'
exit
}
local n=_N
dis " 共搜到`n'篇文章-->> "
else{
local j =_N
forval i = 1/`j' {
local q=网址[`i']
local w=标题[`i']
dis `"{browse "`q'": `w'}"'
}
}
}
else if "`arg1'"!="" & "`arg2'"!="" & "`arg3'"!="" & "`arg4'"==""{
qui keep if yjy1==1 & yjy2==1 & yjy3==1
if _N==0{
dis as error `"没有搜到{`arg1' `arg2' `arg3'}相关的内容,请重新输入"'
dis ""
dis as error `"请注意:不支持大写关键词的推文超链接搜索"'
exit
}
local n=_N
dis " 共搜到`n'篇文章-->> "
else{
local j =_N
forval i = 1/`j' {
local q=网址[`i']
local w=标题[`i']
dis `"{browse "`q'": `w'}"'
}
}
}
else if "`arg1'"!="" & "`arg2'"!="" & "`arg3'"!="" & "`arg4'"!="" & "`arg5'"=="" {
qui keep if yjy1==1 & yjy2==1 & yjy3==1 & yjy4==1
if _N==0{
dis as error `"没有搜到{`arg1' `arg2' `arg3' `arg4'}相关的内容,请重新输入"'
dis ""
dis as error `"请注意:不支持大写关键词的推文超链接搜索"'
exit
}
local n=_N
dis " 共搜到`n'篇文章-->> "
else{
local j =_N
forval i = 1/`j' {
local q=网址[`i']
local w=标题[`i']
dis `"{browse "`q'": `w'}"'
}
}
}
else {
dis as error `"最多仅支持4个关键词搜索"'
exit
}
restore
erase temp.txt
end
如何搜索文章
songbl merge
songbl append
songbl 省级面板数据
songbl 双重差分
songbl didi 倍分法
stata运行结果