删繁就简三秋叶,subinfile似剪刀

2016-11-08 余金馨 爬虫俱乐部 爬虫俱乐部

诸君安。日前与诸君分享了新浪网上市公司公告整理的案例。然而命令繁冗,实在耽误大家搞事情。为此,今天我们给大家就新浪网上市公司公告整理的案例介绍subinfile的用法,大家可与往期文章朝花夕拾|新浪网上市公司公告整理相对比,具体感受一下subinfile删繁就简的实力。




以长江电力的最新公告为例:长江电力公司公告的第二页地址是:http://vip.stock.finance.sina.com.cn/corp/view/vCB_AllBulletin.php?stockid=600900&Page=2



1、copy网页源代码



首先我们用copy命令将网页的内容copy到计算机硬盘并进行转码:

clear

set more off

capture mkdir c:/公告/

cd c:/公告/

copy"http://vip.stock.finance.sina.com.cn/corp/view/vCB_AllBulletin.php?stockid=600900&Page=2"c:/公告/temp.txt, replace

unicode encoding set gb18030

unicode translate temp.txt, transutf8

unicode erasebackups, badidea

打开c:/公告/temp.txt,copy到电脑上的源代码就一目了然了

2、保留所需信息源代码



根据我们所需的信息,我们可以找到其在网页源代码中的位置,如下:


因此,我们只需保留该部分即可,而subinfile之保存功能可以帮我们保留文本文档中含有某个字符串的行。我们所要保留的部分有没有特定的字符串呢?通过分析可知,其均含有如下high light的字符串:

2016-08-09&nbsp;<atarget='_blank'href='/corp/view/vCB_AllBulletinDetail.php?stockid=600900&id=2634052'>长江电力关于向湖北省抗洪救灾捐款的公告</a><br>2016-08-09&nbsp; 2016-08-09&nbsp;<atarget='_blank'href='/corp/view/vCB_AllBulletinDetail.php?stockid=600900&id=2634052'>长江电力关于向湖北省抗洪救灾捐款的公告</a><br>2016-08-09&nbsp;<atarget='_blank'href='/corp/view/vCB_AllBulletinDetail.php?stockid=600900&id=2634051'>长江电力第四届董事会第十二次会议决议</a><br>

Subinfile满足使用条件!开工!

subinfile temp.txt, index(<atarget='_blank' href='/corp/view/vCB_AllBulletinDetail.php?stockid=) replace

执行结果如下:


3、替换源代码分隔符


Subinfile成功帮我们保留了所需信息,包括每次公告的日期、公告内容的标题和链接地址,但中间有一些制表符是我们不想看到的,分别是:

&nbsp;<atarget='_blank' href='

'>

</a><br>

以及文末格格不入的</ul>

我们可以将这些分隔符high light出来,截取一部分代码如下:

2016-04-29&nbsp;<atarget='_blank'href='/corp/view/vCB_AllBulletinDetail.php?stockid=600900&id=2438452'>长江电力第四届董事会第十次会议决议公告</a><br>2016-04-29&nbsp;<atarget='_blank' href='/corp/view/vCB_AllBulletinDetail.php?stockid=600900&id=2438451'>长江电力控股股东及其他关联方资金占用情况的专项说明</a><br>2016-04-29&nbsp;<atarget='_blank' href='/corp/view/vCB_AllBulletinDetail.php?stockid=600900&id=2438450'>长江电力2016年第一季度报告</a><br>                </ul>

而分隔符所隔开的正是我们想要整理列表出来的一条条信息,想想若我们用subinfile之替换功能将繁琐的分隔符替换为简单的”;”,subinfile之删除功能让格格不入的字符串消失,我们的源代码文件岂不是更清晰明了?

subinfile temp.txt, from(</a><br>) to(;;) replace

subinfile temp.txt, from(&nbsp;<atarget='_blank' href=') to(;) replace

subinfile temp.txt, from('>) to(;)replace

subinfile temp.txt, from(</ul>)replace

(</a><br>所隔开的是两个公告的内容,我们将其替换为;;,为了相区分,我们将每条公告内的分隔符&nbsp;<atarget='_blank'href=''>换为;)

摘取部分处理过后的文件如下:

2016-04-29;/corp/view/vCB_AllBulletinDetail.php?stockid=600900&id=2438452;长江电力第四届董事会第十次会议决议公告

;;2016-04-29;/corp/view/vCB_AllBulletinDetail.php?stockid=600900&id=2438451;长江电力控股股东及其他关联方资金占用情况的专项说明

;;2016-04-29;/corp/view/vCB_AllBulletinDetail.php?stockid=600900&id=2438450;长江电力2016年第一季度报告;;

4、数据导入,拆分信息


subinfile通过替换、保留、删除功能帮助我们对长江电力第二页公告的源代码文件做完了全部的修改工作,剩下的就交给infix导入修改完成的文件,split将所需变量公告日期、公告标题和链接地址拆分出来:

infix strL v 1-20000 using temp.txt, clear

split v, parse(;;)

drop v

sxpose, clear

rename _var1 v

split v, parse(;)

drop v

compress


至此,我们以长江电力第二页公告为例的内容整理工作就结束了,工整的数据就在眼前~赶快试试吧!


另附完整程序

clear

set more off

capture mkdir d:/公告/

cd d:/公告/

copy"http://vip.stock.finance.sina.com.cn/corp/view/vCB_AllBulletin.php?stockid=600900&Page=2"d:/公告/temp.txt, replace

 

unicode encoding set gb18030

unicode translate temp.txt, transutf8

unicode erasebackups, badidea

 

subinfile temp.txt, index(<a target='_blank'href='/corp/view/vCB_AllBulletinDetail.php?stockid=) replace

subinfile temp.txt, from(</a><br>) to(;;) replace

subinfile temp.txt, from(&nbsp;<atarget='_blank' href=') to(;) replace

subinfile temp.txt, from('>) to(;)replace

subinfile temp.txt, from(</ul>)replace

 

infix strL v 1-20000 using temp.txt, clear

split v, parse(;;)

drop v

sxpose, clear

rename _var1 v

split v, parse(;)

drop v

compress

编辑by梅洁瓷傲


往期推文推荐:

1.天路——chinafin与cntrade命令

2.分时数据,从此唾手可得

3.有了这个命令,以后还怕重复?

4.esttab功能挖掘:“Yes”or“No”

5.用“套路”处理数据

6.厉害了,我stata哥

7.图之多,stata放得下

8.爬虫俱乐部周末送大礼——chinagcode提取中文地址经纬度

9.据说这样数据替换比较快,你试一下,然后……

10.众里寻她千百度,synth命令来帮助!

11.登登等登 凳登等灯——均值t检验ttable2命令

12.I have a Stata, I have a python



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

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


欢迎关注爬虫俱乐部

✬如果你喜欢这篇文章,欢迎分享到朋友圈✬
评论和打赏功能都已开启,灰常接受一切形式的吐槽和赞美



微信扫一扫
关注该公众号