fileexists:双管齐下提高效率

article/2025/6/8 17:40:20

今天给大家介绍的是程序函数fileexists(“f”),它用来检查一个文件是否存在,如果某文件f存在,则输出结果为1,不存在或f为文件夹,则输出结果为0。

比如,我们想检查E盘里有没有“爬虫俱乐部.txt”这个文件:

clear

set more off

cd E:/

set obs 1

gen v = fileexists("爬虫俱乐部.txt")

list v

输出结果为1,说明E盘里有“爬虫俱乐部.txt”这个文件。

我们再来检查E盘里有没有文件“600900_1.dta”:

clear

cd E:/

set more off

set obs 1

gen v = fileexists("600900_1.dta")

list v

输出结果为0 ,说明E盘里没有文件“600900_1.dta”

我们进行网络爬虫时,如果要抓取的数据量很大,抓取的过程将会花费大量的时间,比方说抓取新浪上市公司公告,一共有将近240万条数据,那么有没有办法提高效率呢?我们可以结合fileexists()函数,使用两个stata同时运行,一个stata用来copy网页源代码,另一个stata进行字符串处理并提取出公告的内容,也就是说一个stata用来copy源代码,另一个stata进行判断,如果对应的源代码抓取了下来,就进行字符串处理并提取出公告的内容。

我们用抓取新浪上市公司公告为例,来讲解如何在爬虫过程中用fileexists()函数使copy网页源代码和字符串处理同时进行。

中介绍过如何抓取新浪上市公司的公告链接,这里我们使用抓取好的两个上市公司的公告链接,分别是600900长江电力和600000浦发银行,并在链接后附加股票代码和编号,用分号隔开,保存为“E:/新浪公告/公告链接.dta”,如下图所示:

1

我们打开一个stata使用“公告链接.dta”copy这两个上市公司所有公告的网页源代码。

clear

set more off

cap mkdir E:/新浪公告/公告内容

cd E:/新浪公告/公告内容

use E:/新浪公告/公告链接, clear

levelsof v, local(levels)

foreach v in `levels' {

if ustrregexm("`v'","(.+?);") local url = ustrregexs(1)

if ustrregexm("`v'",";(.+?);") local stkcd = ustrregexs(1)

if ustrregexm("`v'",";(d+)$") local num = ustrregexs(1)

cap copy "`url'" `stkcd'_`num'.txt, replace

while _rc != 0 {

sleep `=10000*uniform()'

cap copy "`url'" `stkcd'_`num'.txt, replace

}

dis "`stkcd'_`num'"

}

2

我们将所有的公告链接放在一个局部宏`levels’中,对所有的公告链接做循环。使用正则表达式"(.+?);"把开头到第一个分号前的网址提取出来放入`url’中,使用";(.+?);"把两个分号中间的股票代码提取出来放入`stkcd’中,使用";(d+)$"把第二个分号后的数字提取出来放入`num’中。

这里需要注意一点,local后面是不能接if选项的:

所以我们把if提前,相当于

if ustrregexm("`v'","(.+?);") {

local url = ustrregexs(1)

}

3

我们打开另一个stata来进行字符串处理并提取公告内容,我们用同样的方法将股票代码和编号放在局部宏`stkcd'、`num'中,使文件名一一对应。这个时候就轮到fileexists()函数出场啦!我们用fileexists()函数判断文件是否存在,如果不等于1即不存在,则休息2秒。程序如下:

clear

set more off

cd E:/新浪公告/公告内容

use E:/新浪公告/公告链接, clear

levelsof v, local(levels)

foreach v in `levels' {

if ustrregexm("`v'",";(.+?);") local stkcd = ustrregexs(1)

if ustrregexm("`v'",";(d+)$") local num = ustrregexs(1)

while fileexists("`stkcd'_`num'.txt") != 1 {

sleep 2000

continue

}

clear

unicode encoding set gb18030

unicode translate `stkcd'_`num'.txt, transutf8

unicode erasebackups, badidea

set obs 1

gen v = fileread("`stkcd'_`num'.txt")

replace v = ustrregexra(v,"[dD]+<pre>","")

replace v = ustrregexra(v,"<br>[dD]+","")

save `stkcd'_`num', replace

}

由于<pre>在源代码中是唯一的,我们删除开头到<pre>的所有内容,然后删除从<br>开始到结尾的所有内容。

需要注意,由于公告内容行与行之间存在换行符,而正则表达式“.”不能匹配换行符与回车符,因此,我们使用含义相反的一组元字符dD来匹配任意字符(详见推文)。

这样两个stata同时运行就大大提高效率啦!

什么?!没看懂!!不要紧!!戳下面,听爬虫小将的详细讲解,也欢迎大家的批评指正哟!

文字编辑:王 明

关于我们

微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。

投稿要求:

1)必须原创,禁止抄袭;

2)必须准确,详细,有例子,有截图;

注意事项:

1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。

2)邮件请注明投稿,邮件名称为“投稿”+“推文名称”。

3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。


http://www.hkcw.cn/article/bFxFgwlnKj.shtml

相关文章

直播偷录陈冠希,称拥有粉丝十万,陈冠希怒斥他,我粉丝有三千万

4月1日有某平台直播的博主在日本遇到了陈冠希,上前偷怕直播,结果被陈冠希发现,直接踢了一脚,与直播发生了争执,原来这个主播发现陈冠希后,就偷偷跟着陈冠希偷录了几条街,被发现后还装作无辜的样子,称自己家就在这边不要动他,陈冠希大怒你都跟我几条街了,明明往对面方…

[浦东]浦东二中心小学:党建共建“救”在身边——医教共建校园急救安全教育活动

党建共建 互促共赢 党建联建聚合力,互促共赢谋新篇。2024年4月29日下午,中共上海市浦东新区第二中心小学第一、三支部委员会和中共上海市东方医院本部心血管一、三支部委员会党建共建签约仪式在浦东新区第二中心小学举行。双方党组织把“党建联建”活动作为推进共同发展的重要…

教给小学生知道的“动物名称”大全500个

动物名称大全500个,包括鸡、大象、蚊子、蛇、狗、猫、恐龙、蚂蚁、狮子、蜘蛛、蜜蜂、鲸鱼、野生动物、大熊猫、黑猩猩、蝙蝠、猪、鳄鱼、老鼠、老虎、鹦鹉、马、蟑螂、海豚、猴子、鲨鱼、乌龟、牛、章鱼、兔子、苍蝇、蝉、长颈鹿、狼、青蛙、北极熊、蝴蝶、蜥蜴、仓鼠、蜗牛、…

揭秘!一艘大型油轮是如何建造的?

一艘大型油轮是如何建造的? 我们经常看到一些巨大的、大型的和中小型的船舶在海面上行驶,但你有没有想过一艘船舶是如何建造的?其实,建造一艘大型船舶的过程十分复杂,所以过去的我国一度不会造大型船舶。船舶作为一片流动的国土,相当于一个微缩的、完整的海上城镇,在船上…

利好!泉州中心区域再迎重点配套!南埔山片区道路改造新进展!

关注泉州热门,设星标★、点在看,精彩内容不错过>> 不想错过泉州最新最热门信息,记得加“星标”,点“在看”哦,这样每日资讯推送就会第一时间出现在订阅号列表啦。泉州热门” → 点击右上角“...” → “设为星标 ★ ”,搞起来! ▼ #最新消息# 利好! 南浦山片区道…

原创上海美女,嫁给比自己大30岁的房地产富豪,却自己花200万买豪车

有一位上海女子,21岁辍学,勇敢地进入香港娱乐界,成为18线女演员; 后来,他嫁给了一位比自己大30岁的房地产大亨,步入了富人和名人的圈子; 从那时起,她努力跨越边境,成为一名制片人和作家; 据说这位39岁的老人生了一个女儿 它一次又一次地被抛到舆论的风口浪尖上。 有人…

几种酸洗技术讲解及对比

01 酸洗工序主要是通过酸洗液与带钢表面的氧化铁皮发生化学反应和物理冲击使氧化铁皮从带钢表面脱落,从而形成较为理想的表面,酸洗后带钢质量好坏直接影响轧制带钢质量。 随着酸洗工艺技术的发展,特别是盐酸酸洗技术的发展,现在国内的酸洗机组、酸轧机组主要分为几种酸洗形…

「民间故事」七仙女闹离婚

作者:李婷 这天,玉皇大帝正在天庭与诸神议事,忽见七仙女披头散发,哭哭啼啼地跑了来,大声嚷嚷着让父皇为她做主,与董永离婚。 玉帝急问女儿:“这是为何?你与董永过得不是好好的吗?你们当初自由恋爱,朕看董永是异类,不同意你们的婚事,不想在人间留下了千古骂名。前些…

香格里拉唯美大片,每一张都可以做屏保,美到哭~

1933年,詹姆斯希尔顿一本《消失的地平线》,唤起了人们对香格里拉的寻找。那里有雪山、草地、羊群、还有和谐的生活。从此,人们对香格里拉的向往和寻找的脚步就从未停止过~香格里拉就是人们对精神世界和美好生活的向往。香格里拉被找到了,就在云南的西南边,和西藏交界的地方…

汇总整理50本好发的SSCI期刊(含多个学科方向)

精准选刊 当我们谈论起论文发表这个话题时,很难绕开的问题通常是“某某领域/方向有哪些好发的期刊”,或者更加具体一些,“某某期刊是不是好发”。那么,如何去识别“好发的期刊”或者定义“期刊的好发程度”呢?这当然是一个见仁见智的问题。 面对中文CSSCI期刊版面缩减、机…

你的照片,到底该怎样洗?

嗨,洗照片的方式有很多种,比如说喷墨打印,比如说热升华打印,又或者是不多见的银盐冲印,虽然这三种洗照片的方式肉眼可见的区别很小,但从成像原理和效果上还是有区别,今天,富富就“科普”一下,这三种洗照片的方式。 我们打印了同一张小女孩的人像照,乍一看,好像没区别…

原创部首礻的汉字、偏旁部首为礻的汉字有哪些

1、神(shn),9画,左右结构,部首:礻 组词:神情(shn qng) | 神州(shn zhōu) | 神气(shn q) | 神志(shn zh) | 神圣(shn shng) | 各显神通(g xiǎn shn tōng) | 2、祝(zh),9画,左右结构,部首:礻 组词:祝愿(zh yun) | 祝福(zh f) | 祝贺(zh h) | 预祝(y zh) | 庆祝(qng …

原创中国给足俄面子,普京仰头亲自问好,解放军高呼“友谊万岁”

文/战海 7月29日,据“今日俄罗斯”报道,日前,中国海军052DL导弹驱逐舰焦作舰参加了圣彼得堡的俄海军节阅兵式活动。俄总统普京乘一艘快艇检阅参加阅兵式的各国军舰,并在快艇靠近高大的焦作舰时,仰着头向中国海军舰员亲切问候“水兵们好”,焦作舰官兵用整齐洪亮的嗓音回复…

《行尸走肉》中最美的女孩,你以为她17岁?不,她已经32岁了

《行尸走肉》中出现过的女性角色也不少了,由于故事背景设定的原因,这部剧不是很在意颜值这回事。目前到第七季为止,最漂亮的应该是罗西塔了吧,但从整部剧集来看,贝丝应该是该剧的颜值担当。贝丝在剧中是赫谢尔的小女儿,玛姬的妹妹,在赫谢尔的大农场被丧尸攻陷后,贝丝和…

白云又三个教育集团揭牌!

白云区多所教育集团成立揭牌! 三元里小学教育集团揭牌 2024年3月7日上午,三元里小学教育集团成立揭牌仪式在三元里小学本部校区隆重举行。会上,白云区教育局党组成员、副局长何美丽同志宣读三元里小学教育集团成立通知。三元里小学教育集团 核心校是广州市白云区三元里小学,…

乔布斯离世10年 一个抗癌错误 终成遗憾

【留美学子】第2406期 7年国际视角精选文摘 教育人文名师媒体生态圈 仰望星空脚踏实地 耗费3亿 乔布斯抗癌8年离世 一个错误 令人警醒 来源:肿瘤的真相与误区 10月5日,刚好是乔布斯逝世十周年忌日。 作为一位企业家,他是成功的,掀起了手机变革,改变了世界,令人敬佩,最…

原创初音未来的几种不同形象,你喜欢哪一种?

初音未来是一个日本的虚拟歌姬,而且出的音乐也是很受人欢迎,在很多的地方她都有很多的粉丝,而且只要是喜欢二次元的小伙伴们都知道初音未来,并且也喜欢听她的歌曲。初音未来也是有很多的形象,每个形象都很美丽。 初音未来 普通的初音未来就是我们经常看到的初音未来,长相…

爱因斯坦:科学巨匠,智慧之光照亮世界

产学研 阿尔伯特爱因斯坦,作为20世纪最著名的科学家之一,被誉为继伽利略、牛顿之后最伟大的物理学家,他的贡献和重大影响深远地改变了我们对物理世界的理解。以下是他的主要贡献及重大影响的详细概述: 主要贡献光电效应: 发现与解释:爱因斯坦在1905年提出了光电效应的理论…

【红色记忆】李大钊嫡孙李亚中:李大钊同志的家风‖李亚中

欢迎关注“方志四川”!编者按:1927年4月28日下午2时,中国共产主义运动的先驱、伟大的马克思主义者、杰出的无产阶级革命家、中国共产党主要创始人之一李大钊被反动军阀杀害,年仅38岁。今天是李大钊牺牲97周年的日子,“方志四川”新媒体矩阵及“四川省情网”特发布李大钊嫡…

2024年全国高考共有几套卷_各省市都用什么卷?

大家都知道,不同省份可能会有不同的考试模式和试卷类型。那么,2024年全国高考共有几套卷?各省市高考都用什么卷?为了让大家了解2024全国高考试卷类型,特整理本文,希望可以帮助到大家。2024年全国高考共有几套卷? 2024年全国高考共有七套卷。分别是:新高考一卷、新高考二…