专栏名称: 爬虫俱乐部
Stata技术控,编程技术咨询,数据讨论与分享,编程和实证培训。
目录
相关文章推荐
EETOP  ·  原厂培训通知:LabVIEW ... ·  2 天前  
EETOP  ·  AI ... ·  2 天前  
ZOL中关村在线  ·  摄像头模组大变样?REDMI K80至尊版设计曝光 ·  3 天前  
EETOP  ·  IT 大厂员工大降薪,高管翻倍涨! ·  3 天前  
ZOL中关村在线  ·  相机的参数,你真的知道吗? ·  4 天前  
51好读  ›  专栏  ›  爬虫俱乐部

再爬俱乐部网站,推文目录大放送!

爬虫俱乐部  · 公众号  ·  · 2018-03-05 09:40

正文

有问题,不要怕!点击推文底部“ 阅读原文 ”下载爬虫俱乐部用户问题登记表并按要求填写后发送至邮 [email protected] ,我们会及时为您解答哟~

喜大普奔~爬虫俱乐部的 github 主站正式上线了!我们的网站地址是: https://stata-club.github.io ,粉丝们可以通过该网站访问过去的推文哟~

好消息 :爬虫俱乐部即将推出研究助理供需平台,如果您需要招聘研究助理(Research Assistant or Research Associate),可以将您的需求通过我们的公众号发布;如果您想成为一个RA,可以将您的简历发给我们,进入我们的研究助理数据库。帮我们写优质的推文可以提升您被知名教授雇用的胜算呀!

今天我们发布了中国农业科学院农业信息研究所国际情报研究室的招聘研究员信息,详情请见今天发布的另一条推文内容。

本文是对 《爬取俱乐部网站,获取推文目录及网址》 的完善和创新,穿插回顾往期介绍过的一些命令,如rmsg、fs、subinfile等。借用了前文对网页源码的分析,重在介绍使用字符串函数和subinfile两种方式处理源代码的过程,最后分享完整的程序代码和爬取的推文列表excel文件,方便大家查阅。

一、引言

寒假这么好的一个时间,

可以用来完成平时立的flag!

作为爬虫俱乐部的粉丝,

能够温习完平日装满的收藏夹,

回顾一下历史文章再好不过了,

想想都美滋滋!

可是……历史推送呢????

图一:爬虫俱乐部公众号详情信息页面

灵机一闪,往期 《爬取俱乐部网站,获取推文目录及网址》 中有小伙伴已经爬过了,赶紧copy代码试试。

图二:往期推文信息

图三:往期推文代码爬取后的结果

耗时43.23秒(如何获得时间?参考推文 《rmsg-爬虫到底要花多少时间》 ),将推文目录收入囊中。可是browse发现数据里面只有title和url两个变量,而且title是推文的日期?经询问爬虫俱乐部成员,因为网页改版了。本着“自己动手,丰衣足食”的念头,顺带复习字符串函数和subinfile的用法,就踩着前人的肩膀开干了。

二、分析网页,用字符串函数提取信息

网页分析思路与前文类似,往期推文中已经说的比较到位了,放上前文的截图。

图四:往期推文中对网页的分析

源代码抓取和往期推文一致,代码如下:

forvalue i = 1(1)500 {

if `i' == 1 {

dis "第`i'页"

cap copy "https://stata-club.github.io/categories/%E6%8E%A8%E6%96%87/" `i'.txt,replace

}

else {

dis "第`i'页"

cap copy "https://stata-club.github.io/categories/%E6%8E%A8%E6%96%87/page/`i'/" `i'.txt,replace

if _rc != 0 {

dis "一共`=`i'-1'页,抓取完毕"

continue ,break

}

}

}

取得所有页面的源代码之后,首先,针对单页进行处理,剔除无用信息。此部分先使用字符串函数处理,下一部分使用神器 subinfile 命令一步到位~~

先使用fileread()函数将源代码读入stata,之后将变量v以

clear

set obs 1

gen v = fileread("1.txt")

split v ,p( `" )

sxpose ,clear

drop in 1/2

gen title = ustrregexs(1) if ustrregexm(_var1,">(.+?)

gen date = ustrregexs(1) if ustrregexm(_var1,"文/(.+?)/")

gen url = "https://stata-club.github.io/推文/" + date + "/"

drop _var1

gen date1 = date(date, "YMD")

format date1 %tdCY-N-D

drop date

rename date1 date

至此,我们得到了一页所需要的信息,要获取所有页面的信息将源代码处理的过程嵌入循序即可。最后,再将处理好的源代码信息合并,程序如下:

clear

fs *.dta

foreach c in `r(files)' {

append using `c'

}

三、用subinfile命令完成爬虫

图五:采用subinfile爬取推文列表的完整程序

上面介绍了使用常规的字符串函数的方法这里祭出神器,采用subinfile命令一步到位!subinfile之前有几篇推文已经详细介绍过了,可以参见 《subinfile再创新高》 《删繁就简三秋叶,subinfile似剪刀》 《用subinfile修改文件,滚蛋吧,繁琐的命令君!》

获取源代码的程序和第二部分一样,差异主要在对源代码的处理上,采用subinfile首先利用index选项定位到标题和链接所在的class下(见图六),采用index选项后,处理后的源代码如图七:

图六:源码中包含链接和标题的行

图七:加入index选项处理后的源代码

20180203/">组内交叉合并—joinby 例,可以看出需要经过的处理有:

1.使用正则表达式 "(.+?推文/)|()" 将上边红色部分的字符串删除掉;

2.导入stata,并以“ /"> ”分割变量;

3.将date前添加 https://stata-club.github.io/推文/ ,date后添加“ / ” 得到推文的url;

整个处理过程写成代码如下:

subinfile `i'.txt,index (`" from("(.+?推文/)|( )") fromregex replace

infix strL v 1-20000 using `i'.txt,clear

split v,p (`"/">"' )

drop v

rename (v1 v2) (date title)

tostring date ,replace

gen url = "https://stata-club.github.io/推文/" + date + "/"

gen date1 = date(date, "YMD")

format date1 %tdCY-N-D

drop date

rename date1 date

save 1,replace

将处理字符串的命令加入循环中,即可得到爬虫俱乐部网站推文列表的程序,完整程序见第四部分。

四、完整程序

将上文中提及的部分代码整理之后就可以爬取推文的日期、标题和链接,完成之后export到excel通过超链接点击url即可访问对应的文章,而且生成目录方便根据关键词查找对应的文章,便于温习回顾,大大提高工作效率。

subinfile 处理完整程序:

clear

cap mkdir e:/推文合集

cd e:/推文合集

forvalue i = 1(1)35 {

if `i' == 1 {

dis "第`i'页"

cap copy "https://stata-club.github.io/categories/%E6%8E%A8%E6%96%87/" `i'.txt,replace

}

else {

dis "第`i'页"

cap copy "https://stata-club.github.io/categories/%E6%8E%A8%E6%96%87/page/`i'/" `i'.txt,replace

if _rc != 0 {

dis "一共`=`i'-1'页,抓取完毕"

continue ,break

}

}

subinfile `i'.txt,inde x(`" from("(.+?推文/)|( )") fromregex replace

infix strL v 1-20000 using `i'.txt,clear

split v, p(`"/">"')

drop v

rename (v1 v2) (date title)

tostring date ,replace

gen url = "https://stata-club.github.io/推文/" + date + "/"

gen date1 = date(date, "YMD")

format date1 %tdCY-N-D

drop date

rename date1 date

save `i',replace

}

clear

fs *.dta

foreach c in `r(files)' {

append using `c'

}

注:此推文中的图片及封面(除操作部分的)均来源于网络!如有雷同,纯属巧合!

以上就是今天给大家分享的内容了,说得好就赏个铜板呗!有钱的捧个钱场,有人的捧个人场~。 另外,我们开通了苹果手机打赏通道,只要扫描下方的二维码,就可以打赏啦!

广大粉丝要求,爬虫俱乐部的推文公众号打赏功能可以开发票啦,累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫。第一批发票已经寄到各位小主的手中,大家快来给小爬虫打赏呀~

文字编辑/吴晓蔓

技术总编/刘贝贝


往期推文推荐:

1. 高校学术大神:你的导师上榜了吗?

2.中国高校财经、管理与综合类期刊灌水排行榜

3.







请到「今天看啥」查看全文