Stata | 爬取 CFPS 文献传送门并制作成 Markdown
时间:2022-07-22
本文章向大家介绍Stata | 爬取 CFPS 文献传送门并制作成 Markdown,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
前言
今天去 CFPS 官网下载文档时,发现官网【学术研究-文献传送门】栏目整理了一些使用 CFPS 完成的文献,而且还带有项目组的解读,是不错的学习资料。但是我觉得在网站上逐篇看起来不太方便,所以就动手将内容爬取并制作成 Markdown 文档。项目思路大致如下:
- 首先爬取文献的标题和链接;
- 之后对标题的字符串进行清洗(因为文件名不能包含特殊字符);
- 随后调用 Python 的第三方库
html2text
(使用前先pip install html2text
安装),将内容保存为 Markdown; - 最后在 Typora 软件打开文件夹,左侧可显示所有文件的名称,便于索引。# # 实现过程
爬取标题和链接
* 查询截止页码
copy "http://www.isss.pku.edu.cn/cfps/xzyj/wxzsm/index.htm" cfpsClass.txt, replace
infix strL v 1-20000 using cfpsClass.txt, clear
keep if index(v, "共有:")
if ustrregexm(v,`"共有:<font color="#ff0000">(d+)</font>页"'){
local a = ustrregexs(1)
dis "共有:`a' 页!"
}
* 爬取文献标题和链接
forvalues p =1/`a'{
if `p' == 1{
local p = `""'
}
else{
local p = `p' - 1
}
copy "http://www.isss.pku.edu.cn/cfps/xzyj/wxzsm/index`p'.htm" cfpsClass.txt, replace
infix strL v 1-20000 using cfpsClass.txt, clear
keep if index(v,`"<a href="') & index(v,`"title"') & index(v, `"arget="_blank">"')
gen title = ustrregexs(1) if ustrregexm(v,`"title="(.*?)""') == 1
gen link = "http://www.isss.pku.edu.cn/cfps/xzyj/wxzsm/" + ustrregexs(1) ///
if ustrregexm(v,`"<a href="(.*?)""') == 1
keep title link
save "./temp/temp`p'.dta", replace
}
* 保存数据
openall, directory("./temp/")
sort link
compress
save "./result/allPaperList.dta",replace
标题字符串清洗
cd result
use "allPaperList.dta", clear
* 清洗文献标题 -> 合规文件名
gen title2 = usubinstr( ///
usubinstr(ustrregexra(title,"[[:punct:]]","")," ","_",.) ///
,"$","_",.)
replace title2 = usubinstr(usubinstr(title2,"_|_","_",.),"_","",-1)
save "allPaperList.dta", replace
经过上述两步,获取的结果如下:
调用 Python 下载并保存为 Markdown
python:
import requests
import html2text as ht
title = Data.get(var='title')
title2 = Data.get(var='title2')
links = Data.get(var='link')
for i in range(len(links)):
html = requests.get(links[i])
html.encoding = 'utf8'
md = ht.html2text(html.text)
md = md.split("##")
filepath = title2[i] + ".md"
with open(filepath, "w", encoding='utf8') as f:
for row in range(3, len(md)):
f.write(md[row])
end
最后的效果如下:
这样就可以专注在 Typora 里面查看了,而且 Markdown 中也可以很方便的添加自己的笔记。需要声明的是,本文内容仅供于个人学习,版权归原网站所有。
- VR技术的进步推动工业机器人革命
- tLinux 2.2下安装Mono 4.8
- WordPress评论回复邮件样式美化教程
- 基于Aspose.Pdf把pdf文件每一页转换为图片
- 分布式文件存储的数据库开源项目MongoDB
- 使用 JavaScriptService 在.NET Core 里实现DES加密算法
- 拒绝全英文垃圾评论!仅用代码实现
- 在.NET Core 里使用 BouncyCastle 的DES加密算法
- 微信小程序:为了满足三方需求,我们一直在改变
- 让陌生人能够相互自由交易和支付
- 斯坦福发布首份 AI Index 报告,AI 研究者不再茫然
- jQuery仿极客公园火箭发射“返回顶部”效果(初始篇)
- Java程序员必读,Java设计模式应该遵循哪些原则
- Visual Studio 2010快速参考指南里头的Scrum海报
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android实现获取meta-data和build.gradle的值
- 浅谈Android Studio导出javadoc文档操作及问题的解决
- Android获取清单文件中的meta-data,解决碰到数值为null的问题
- android studio 打包自动生成版本号与日期,apk输入路径详解
- 详解关于AndroidQ获取不到imsi解决方案
- 解决webview 第二次调用loadUrl页面不刷新的问题
- 浅谈 Android 7.0 多窗口分屏模式的实现
- Kotlin中的对象表达式和对象声明的具体使用
- Android 实现为点击事件添加震动效果
- 解决Android studio Error:(30, 31) 错误: 程序包 不存在的问题
- AndroidQ 沙箱适配多媒体文件(小结)
- Bitcron 主题 Berry(简约wordpress主题)
- Android 实现图片转二进制流及二进制转字符串
- Android 如何实现exclude aar包中的某个jar包
- android 实现控件左右或上下抖动教程