首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Stata爬取新浪滚动新闻!

转眼年就要过完了,告别温暖舒适的家,又要回到工作岗位奋斗。在家安逸了这么久,是不是想看看最近发生了那些新闻呢?

打开新浪滚动新闻,海量的新闻铺面而来……新闻每60秒滚动一次,当天的新闻已经有一百七十多页了。如果想浏览每条新闻的话岂不是需要点击一百多下?!有没有办法把所有的新闻的标题和链接都弄下来,挑自己感兴趣的阅读呢?

有!爬!!

“人生苦短,我用····”其实,Stata也可以用来爬虫哦,今天小编就像大家展示用Stata爬取新浪滚动新闻。

一、网页“一探究竟”

进入网页之后,点击最下方的翻页栏,发现page参数会随点击页面跳转。F12打开开发者工具,再F5刷新,发现网页请求方式为get。get请求链接中一般会带上请求的内容。观察首页链接网址栏page=1 ,那换成page=2是不是就跳转到第二页呢?如果是这样,我们把page参数套在循环中,是不是就可以获得想要页数的新闻?我们来试试!

page翻页

的确如此!这样的话,我们加入循环翻页的想法就可以实现。那光翻页不行呀,我们想要的是新闻的标题和链接啊。下面我们再来看如何找新闻的标题和链接。

在对应的新闻标题上点击检查,会跳出来我们刚F12打开的类似的东西,这是什么呢?这是网页的源代码。网页上展示的东西一般都会包含在源代码中,可以点击开发者工具栏左上角箭头(或快捷键ctrl+shift+c)尝试点击不同的新闻,发现会返回在源代码中不同的地方。这样的话,如果我们能拿下来每个网页的源代码,挑选想要的信息不就行了?思路好像可以,我们不妨试试。

检查网页元素

以上,我们介绍了完成爬虫最基本的思路:

1.获得网页源代码,挑选想要的信息;

2.套入循环,爬取多页的信息。

那么问题来了?在Stata中:

1.怎么获得源代码?

2.怎么挑选想要的信息?

3.怎么套入循环?

1. copy -- copy file from disk or URL

copy filename1 filename2 [, options]

infix (fixed format) -- Read text data in fixed format

infix using dfilename [if] [in] [, using(filename2) clear]

infix specifications using filename [if] [in] [, clear]

用copy命令,可以读取网页,将源代码存为txt格式。之后采用infix命令将源代码读入Stata。

2. 挑选想要的信息涉及字符串的处理,Stata也提供了非常丰富的字符串处理函数。篇幅有限,这里就不一一列举,大家有兴趣可以help string function。

Stata字符串函数

3. Stata中循环语句主要使用forvalues\foreach。forvalues语句用于对连续的数值进行循环,foreach语句后面可用于一般形式的list。关于二者详细的区别大家可以help看看。所以,那本文中page=(1/2/3……n)该用哪一个呢?

这些基础知识铺垫完了之后,我们先开始挑选首页抓取想要的信息,之后以前30页为例套入循环,最后提供完整的程序代码。

二、爬取单页分析过程

(一)copy源代码、读入Stata

首先设置工作路径,mkdir创建一个新的文件夹用来存放爬下来的源代码,之后更改到新创建的文件夹下。接着copy第一页的源代码,存放在news.txt中,运行该命令之后dir会发现当前工作路径下多出了一个文本文档,这就是我们准备下锅的“米”了。

采用infix命令将源代码读入名为v的变量中,为了方便查看,我们将v的format设置一下,这时惊讶的发现,怎么中文显示的是乱码??这与网页的编码有关,在Stata变量窗口ctrl+f搜索charset=(也可以在网页源代码中查看),发现网页为gb2312编码,所以需要进行转码。

infix读入为乱码

有两种转码的方式:

1.在存放源代码的工作路径下,利用translate转码。需要注意的是Stata内存中不能有数据。命令如下:

clear

unicode analyze *.txt

unicode encoding set gb18030

unicode translate *.txt,transutf8

unicode erasebackups,badidea

2.采用import delimited后的encoding()选项。不过这种方式导入之后会拆分成多个变量,生成一个变量v将几者合并,再只保留v就好。

上述copy源代码和读入Stata部分的代码见下图:

copy+导入部分代码

(二)字符串处理部分

将源代码读入Stata之后,接下来就是使用字符串函数来得到我们想要的信息了。回到网页的源代码,我们要寻找所需信息之间的规律,然后“快准狠”的将多余字符串剔除。

发现所有的新闻title都在下,那前面这个href=”…”中的链接是什么呢?我们open in new tab发现它就是这则新闻的url。

这样我们的处理思路就是:在所有源码中保留

运行之后的是怎么样呢?期不期待?下面放上导入数据和字符串处理的动图演示:

(三)数据最后的处理与保存

经过上述步骤之后,我们基本得到了想要的信息,还差title和url的分割与数据的保存。细心的读者会发现,在刚刚字符串的处理时,我们留了一手,在变量中包含target=_blank>,这是故意留下来作为分割标识的。采用split命令的parse()选项就可以将v分割成两个变量,分别重命名为title和url,再将v删除,最后分别将数据保存为.dta格式和export为excel格式,再用=hyperlink()函数,将url处理为超链接,这样点击感兴趣的title就可以访问对应的新闻啦!这样我们刚开始的目标就基本完成。此部分对应的代码如下:

数据最后的处理与保存

三、套入循环,抓取前30页为例

因为此部分在代码上和前文类似,小编就用动图给大家演示效果。文末会附上完整的程序代码,大家自行查看就好了~

再说两句,在每页的新闻爬下来之后,采用openall命令将它们“粘”起来,openall简直是一个神器,附上简介和用法,大家可以自己help看看。

openall -- Open many data sets by appending them

openall [files], [directory(string)] [storefilename(string)] [insheet]

完整程序演示

四、善后工作

在将我们需要的title和url存到excel之后,还给大家说说“善后”工作:1.删除过程中产生的每页的dta文件,这个采用erase命令,套入循环即可,可以参见文末完整代码;2.将excel中url转换为超链接,为了说明清楚,直接上动图演示如下:

excel超链接演示

五、附爬取前30页完整程序

欢迎大家踊跃投稿,内容有关人文社会科学的即可,可以是学术前沿思想介绍、各种定量研究技术和方法介绍、各种软件(stata、Python、R语言,数据可视化等等)数据处理及分析技巧,可以是网络爬虫技巧,也可以是学术论文写作与发表等相关内容。

投稿要求:

1、务必原创、禁止抄袭;

2、务必准确、详细,有例子,有数据,有截图;

注意事项:

1、所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,我们会在推文里注明作者署名,并有稿酬提供

2、邮件请注明投稿,邮件名为“投稿+推文名称+作者+联系方式”;

以人文之情怀

以学术为志业

···········

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180228G0PAY400?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券