专栏首页PyStaDataStata | 爬取 CFPS 文献传送门并制作成 Markdown

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 中也可以很方便的添加自己的笔记。需要声明的是,本文内容仅供于个人学习,版权归原网站所有

本文分享自微信公众号 - PyStaData(gh_60f259052905),作者:mudaozzz

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-05-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Stata | 自动生成中南财大2019拟录取硕士研究生分析报告

    又是一年考研季,今天有朋友问我去年的学校录取情况。作为一只“菜狗”,这那是我该操心的事,但我还是去官网找了下去年的结果。然而官网上拟录取名单是 PDF 格式,不...

    PyStaData
  • Stata | 排名转为得分

    手头有一份美国历届总统的排名,排名从 1~44,需要将他们转化为对应的得分。换言之,将 1 位排名等价换算成 分。比如第一名为 分,第二名为 分,依次类推。...

    PyStaData
  • Stata | 爬取企业景气指数与企业家信心指数

    之前看见有文章在稳健性检验部分,用企业景气指数和企业家信心指数代替 GDP 增长率作为宏观经济层面投资机会的替代变量(李凤羽和杨墨竹,2015)。所以想收集来看...

    PyStaData
  • 使用copy声明NSString属性

    声明一个NSString属性使用copy要优于使用strong。这同样适用于遵守NSCoding协议的不可变类(immutable class),如NSNumb...

    Jace
  • HDU 5676 ztr loves lucky numbers

    ztr loves lucky numbers Time Limit: 2000/1000 MS (Java/Others)    Me...

    ShenduCC
  • 浅谈 Glide - BitmapPool 的存储时机 & 解答 ViewTarget 在同一View显示不同的图片时,总用同一个 Bitmap 引用的原因

    作者:林冠宏 / 指尖下的幽灵 掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8 博客:htt...

    林冠宏-指尖下的幽灵
  • SpringFramework之HandlerMapping的俩个默认实现类的初始化

        们由DispatcherServlet的初始化简析得知默认的HandlerMapping是BeanNameUrlHandlerMapping和Defau...

    克虏伯
  • 缓冲流---为字节流和字符流复制文件增加缓冲流

    shimeath
  • nginx配置基础之rewrite

    重写URL是非常有用的一个功能,因为它可以让你提高搜索引擎阅读和索引你的网站的能力;而且在你改变了自己的网站结构后,无需要求用户修改他们的书签,无需其他网站修改...

    后端技术探索
  • 推荐一款高效的处理延迟任务神器

    时间轮是一种高效、低延迟的调度数据结构。其在Linux内核中广泛使用,是Linux内核定时器的实现方法和基础之一。按使用场景,大致可以分为两种时间轮:原始时间轮...

    黄泽杰

扫码关注云+社区

领取腾讯云代金券