大数跨境
0
0

爬虫实战——stata抓取教育部文件(一)

爬虫实战——stata抓取教育部文件(一) Stata and Python数据分析
2024-10-18
0
导读:Better be envied than pitied.

本文作者:刘畅,河南大学经济学院

本文编辑:魏玲辉

技术总编:兰博文

Stata and Python 数据分析

爬虫俱乐部Stata基础课程Stata进阶课程Python课程可在小鹅通平台查看,欢迎大家多多支持订阅!如需了解详情,可以通过课程链接(https://appbqiqpzi66527.h5.xiaoeknow.com/homepage/10)或课程二维码进行访问哦~

 


一、导读

近日多地教育局通报违约定向培养对象名单,定向培养师范生作为国家“支持和补助地方中小学教师队伍建设”,实现教育公平的的方式,针对此项政策的相关文件也有许多,早在今年1月,教育部便发布了《教育部办公厅关于做好2024届教育部直属师范大学公费师范毕业生就业工作的通知》,要求各省级教育行政部门要加强公费师范生的履约管理。今天,我们来爬取教育部发布的教师相关文件,了解教育部对于教师管理和规范的最新要求。

教育部网站发布文件的具体网址是:http://www.moe.gov.cn/was5/web/search?channelid=239993

教育部文件众多,如果只想爬取教师相关的文件,我们可以根据信息拥有司局来判断并进行限制。搜索教师相关文件,发现多为教师函和教师厅函发布,点开发现后发现相关文件在网址中多有A10标识,属于教师管理司发布的文件(对应条件如下),那么今天我们来主要爬取教师工作司发布的文件。


信息拥有司局

代码

办公厅

A01

政策法规司

A02

发展规划司

A03

人事司

A04

财务司

A05

基础教育司

A06

职业教育与成人教育司

A07

高等教育司

A08

民族教育司

A09

教师工作司

A10

教育督导司

A11

思想政治工作司

A12

社会科学司

A13

高校学生司(高校毕业生就业服务司)

A15

科学技术与信息化司

A16

体育卫生与艺术教育司

A17

语言文字应用管理司

A18

语言文字信息管理司

A19

国际合作与交流司(港澳台办公室)

A20

机关党委

A21

学位管理与研究生教育司(国务院学位委员会办公室)

A22

中国联合国教科文组织全国委员会秘书处

A23

退休干部局

A24

纪检组、监察局

A25

教材局

A26

综合改革司

A27

巡视工作办公室

A28

校外教育培训监管司

A29

二、爬取通知链接

 单个页面
首先,我们对单个页面进行分析,右击页面查看页面源代码(图),能够观察到相关通知的源代码如下图所示。在其相对应的源代码中,包含了我们想要获取的网址、标题以及日期,观察们发现每个所需的代码中都包含了“</span></li>”和“<a href”,我们以同时存在这两种代码为判别条件,使用正则表达式,仅保留涵盖这两种代码的部分。 

clear allcd C:\Users\23259\Desktop\Stata17\教育部信息copy "http://www.moe.gov.cn/was5/web/search?channelid=202456" 1.txt, replace infix strL v 1-100000 using 1.txt, clearkeep if ustrregexm(v, `"</span></li>"') & strpos(v, `"<a href"')replace v = subinstr(v, "&nbsp;","", .)
接着,我们对代码进行拆分,并提取我们想要的信息。
gen 发布链接 = ustrregexs(1) if ustrregexm(v, `"href="(.*?)""')drop if 发布链接==""split v,p("</a>")gen 标题 = ustrregexra(v1, "<.*?>", "")gen 发布时间 = ustrregexra(v2, "<.*?>", "")drop v v1 v2save 1.dta,replace
多个页面
当我们跳转到第二页时,其网址发生变化,后缀加上了“&page=2”此时我们返回第一页发现,第一页的网址与第二页的格式相同,仅仅在页数发生变化,后缀加入“&page=1”,并且这一规律在后面的页面得到验证。因此,我们可以通过变换页码的方式,将单个页面分析写入循环来爬取多个页面的通知公告。
clear allcd C:\Users\23259\Desktop\Stata17\教育部信息forvalues i = 1/32 {  cap copy "http://www.moe.gov.cn/was5/web/search?channelid=202456&page=`i'" temp.txt,replacewhile _rc != 0 {      sleep 5000    cap copy "http://www.moe.gov.cn/was5/web/search?channelid=202456&page=`i'" temp.txt,replace} infix strL v 1-100000 using temp.txt, clearkeep if ustrregexm(v, `"</span></li>"') & strpos(v, `"<a href"')replace v = subinstr(v, "&nbsp;","", .)gen 发布链接 = ustrregexs(1) if ustrregexm(v, `"href="(.*?)""')drop if 发布链接==""split v,p("</a>")gen 标题 = ustrregexra(v1, "<.*?>", "")gen 发布时间 = ustrregexra(v2, "<.*?>", "")drop v v1 v2save "`i'.dta", replace }clear //将爬取的链接数据合并为一个总的教育部数据,并生成序号forvalues i = 1/32 {  append using "`i'.dta"}gen 序号=_norder 序号 发布链接save 教育部数据.dta ,replace


爬取单页文章摘要
当我们想要更进一步了解每个通知具体内容时,我们有两种方法:一是对每个通知的摘要部分进行分析整理,二是对通知的摘要部分以及正文内容(涵盖附件)进行分析整理。本次,我们先单独分析摘要部分,正文及附件的抓取将在下一部分讲解。
首先,我们将已经爬取的文件通知相关信息,通过循环将每个文件的发布链接放在对应的txt文件里,并命名为“file*.txt”。
use 教育部数据.dta,clearlocal N=_N forvalue i=1(1)`N'{local url`i'=发布链接[`i']}forvalue j=1(1)`N'{copy "`url`j''" "file`j'.txt",replace}
单个txt文件摘要分析
以file1.txt文件为例,打开后发现,该文件内是所发布的通知的源代码,如下图,我们可以先将我们需要的信息提取出来,以信息名称、信息索引、生成日期、发文机构等为例。

经过观察可以发现,我们可以通过正则表达式,仅保留含有“<td class.*?">”*的行,以及进行相关处理保留文字内容,结果如下图。
clear allcd C:\Users\23259\Desktop\Stata17\教育部信息infix strL v 1-20000 using file1.txt,clearkeep if ustrregexm(v, `"<td class.*?">"')replace v = ustrregexra(v, "<.*?>", "")gen v1 = v[_n + 1]keep if mod(_n, 2) == 1sxpose, clear nrowsave file1.dta,replace



多个txt文件摘要分析
了解了单页文本分析摘要的流程后,接下来,进行多个txt文件分析时,我们仅需使用forvalues函数将前面的单个txt文件命令写入循环,用merge函数将发布链接、标题与发布日期所在的dta文件进行合并,最后将合并后的文件合并成一个总数据文件。
文件时间跨度大,部分政策已失效,出于时效性考虑,仅保留2011年及以后的通知,共计347个文件。
clear all cd C:\Users\23259\Desktop\Stata17\教育部信息use 教育部数据, clearforvalues f = 1(1)347{  infix strL v 1-200000 using file`f'.txt, clear  keep if ustrregexm(v,`"<td class.*?">"')  replace v = ustrregexra(v, "<.*?>", "")  gen v1 = v[_n + 1]  keep if mod(_n, 2) == 1  sxpose, clear   nrow  gen 序号=`f'  rename (信息名称:信息索引:生成日期:发文机构:发文字号:信息类别:内容概述:) (信息名称 信息索引 生成日期 发文机构 发文字号 信息类别 内容概述 )  order 序号 信息名称  merge m:1 序号 using 教育部数据.dta  keep if _m==3  drop _m     keep 序号 信息名称 信息索引 生成日期 发文机构 发文字号 信息类别 内容概述 发布链接 标题 发布时间  save file`f'.dta,replace}clear allforvalues i =1(1)347{  append using "file`i'.dta"}save 总数据.dta,replace
导出

      最后,我们将所爬取的合并数据导出成Excel形式。

order 序号 标题 发布时间 发布链接export excel 总数据.xlsx,firstrow(varl) replace

抓取的最终数据如下(部分截取):

按照类似的方法,我们也可以爬取其他部门和司局发布的最新文件,希望本期内容对大家有所帮助~ 





重磅福利!为了更好地服务各位同学的研究,爬虫俱乐部将在小鹅通平台上持续提供金融研究所需要的各类指标,包括上市公司十大股东、股价崩盘、投资效率、融资约束、企业避税、分析师跟踪、净资产收益率、资产回报率、国际四大审计、托宾Q值、第一大股东持股比例、账面市值比、沪深A股上市公司研究常用控制变量等一系列深加工数据,基于各交易所信息披露的数据利用Stata在实现数据实时更新的同时还将不断上线更多的数据指标。我们以最前沿的数据处理技术、最好的服务质量、最大的诚意望能助力大家的研究工作!相关数据链接,请大家访问:(https://appbqiqpzi66527.h5.xiaoeknow.com/homepage/10)或扫描二维码:


对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!


往期推文推荐





国庆档电影豆瓣评论,谁领风骚

清洗实证数据的案例——计算比率和知网数据重命名

空间计量与Stata(一)

探索源远流长的家族历史——爬取祠堂数据

【Python实战】基于大数据的贷款违约分析

【爬虫实战】 A股上市公司基本面类数据分析——基于TuShare中的财务指标数据
Python爬虫实战:从抓取年报并分析数据开始

【数据分析基础】Python数据交叉表

使用usesome命令来精确控制你的数据导入
Python爬虫——获取NASA卫星数据
基于情感词典的文本情感分析——以携程网景点评论为例
fre命令——展示变量的频率分布
Chatgpt|GPT在文本分析中的应用:一个基于Stata的集成命令用法介绍
数量经济技术经济研究|GPT在文本分析中的应用:一个基于Stata的集成命令用法介绍
变量的不同观测值个数统计——distinct和vardistinct
品诗雅谈的“诗词大会”——putdocx指令的使用
Stata答疑——专利个数知多少

Stata压缩和解压缩文件的几种方法

【python库——whisper】实现音频转换成文字功能



     关于我们 

   微信公众号“Stata and Python数据分析”分享实用的Stata、Python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

   武汉字符串数据科技有限公司一直为广大用户提供数据采集和分析的服务工作,如果您有这方面的需求,请发邮件到statatraining@163.com,或者直接联系我们的数据中台总工程司海涛先生,电话:18203668525,wechat: super4ht。海涛先生曾长期在香港大学从事研究工作,现为知名985大学的博士生,爬虫俱乐部网络爬虫技术和正则表达式的课程负责人。



此外,欢迎大家踊跃投稿,介绍一些关于Stata和Python的数据处理和分析技巧。

投稿邮箱:statatraining@163.com投稿要求:1)必须原创,禁止抄袭;2)必须准确,详细,有例子,有截图;注意事项:1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。











【声明】内容源于网络
0
0
Stata and Python数据分析
爬虫俱乐部,新的启航
内容 1337
粉丝 0
Stata and Python数据分析 爬虫俱乐部,新的启航
总阅读512
粉丝0
内容1.3k