爬虫抓取网页数据(篇:详解stata爬虫抓取网页上的数据part1)
优采云 发布时间: 2022-04-01 09:33爬虫抓取网页数据(篇:详解stata爬虫抓取网页上的数据part1)
接上一篇:stata爬虫爬取网页数据详解part 1
本文的do-file及相关文件链接:密码:40uq
如果链接失效,请私信,看到后我会回复,谢谢。
我们开始抓取1000个网页的源代码,将temp1.txt—temp1000.txt保存在e盘2文件夹中,再次使用“Merge.bat”将1000个txt合并为一个文件all.txt,先把命令放在这里,一一解释:
注意:第一行的本地命令必须用以下两个循环运行,否则会提示错误,原因会在下面解释。
抓取1000个网页源代码并合并
使用local命令生成一个临时变量N = _N(注意:在stata中,_n和_N都是默认变量,有固定的含义。_N代表观察次数,当然等于1000,_n代表从1到1000,要理解这两个,可以用gen N = _N,和gen n = _n,然后浏览看看N和n有什么不同),但是本地命令生成的变量N不会显示在变量窗口,而是临时存放在stata的内存中,需要的时候可以调用。下面是一个小例子来演示local的作用(需要注意的是local命令行和下一行调用local生成的变量的命令必须一起运行,否则会提示错误,因为本地宏命令生成的变量只是临时的,一旦遇到end of do-file【观察stata主界面,每条命令运行后都会提示end of do-file】,生成的临时变量会是已删除,无法再次调用。详见下图官方英文。解释,以蓝色突出显示,尤其是最后一句):
演示本地命令,比较_n和_N的区别
关于marco宏的进一步解释,有兴趣的可以参考官方帮助文件中的相关说明,如下:
marco宏的官方解释
了解了local之后,再看接下来的两个循环就容易多了。第二个循环是把url变量映射到purl变量上(purl变量就是前面1000个链接)并存储起来,但是变量窗口中没有显示出来,第三个循环是调用存储在里面的1000个url url变量,把这1000个网页的源代码复制下来,存放在e盘的2文件夹中,命名为temp1.txt —temp1000.txt,这个过程取决于网页的速度网络,大约需要30分钟,数字变化如下图,最后temp1000.txt完成。之所以会提示not found,是因为我们在grab命令后面加上了replace选项,就是告诉stata如果在e盘2文件夹中找到同名文件就替换掉,但是stata发现没有同名的文件,所以会提示找不到,并按要求生成新文件。如果stata找到同名文件,则不会有这个提示,而是直接替换掉。
爬取1000个网页源码流程
等了好久,终于用我们在part 1中使用的bat批处理命令调用dos将1000个txt合并到all.txt中(这次是在文件夹2中处理,和之前的all.txt不同) . 到目前为止,已经获得了1000个网页的源代码。这1000个网页的源代码非常重要,因为我们需要的GDP信息都收录在其中。同理,我们使用中缀命令将其读入stata进行处理。该命令如文章开头的图中所示。因为文本比较大,所以最好在阅读文本之前先清除,否则可能会导致stata崩溃,长时间写dofile。不保存就不好了(具体原因不明,推测可能是内存不够?。?)。
文本读入后变成变量v,然后开始过滤净化,这也是最复杂的工作,因为总共735748行代码只需要提取两条信息,一条一个是“某个地区的几年”,一个是“GDP”。根据我们需要的信息,寻找收录这两条信息的关键行,观察它们所在行的共同特征。通过观察,我们可以看到,地区名称所在的行都收录这样的字符,而GDP或生产总值所在的行收录“生产总值”等字符(如下图所示),所以我们只需要保留收录这两个字符的代码行。
观察代码行特征,发现规律
第一步:设置两个指标变量(以虚拟变量的形式)a和b。对于a变量,如果v变量(即所有代码行所在的变量)收录,让stata返回值1,表示“是收录”,否则返回0,表示“不收录”收录”。类似地,b 变量是以“总产量”为指标生成的。然后,保持 if a==1 | b==1 表示保留收录或收录“总产量”的行。这一步很快将代码行数过滤到只有 4570 行。
生成两个指标变量
第2步-第N步:都是砍、守、砍、守、砍、守……因为仁者见仁,智者见智,我的不一定是最好的,但道理是一样的。所以只对用到的部分命令和函数进行说明,见do-file中的相关注释【strpos,duplicates drop】。
剪切和替换
继续切割,更换,保持
最终数据
可以看到,有些数据前面有一些乱七八糟的字符。这是因为每个公告的书写格式不统一。它需要继续处理。方法同上,拆分、替换、保留。我不会在这里继续演示。有兴趣可以继续。
随便找一些数据在网站上查看,看看对应的数据是否准确。比如我从上图左右两边随机选取了2015年的合肥市和2013年的九江市进行验证,查询结果如下,经核对无误:
查询验证结果
最后,对于空缺的部分,你可以去网站找数据补上。另外,这次我应得的1000行数据,但最终得到了1015行数据。原因可能是公报的格式不完全统一,有的数据是省级GDP(少),有的是市级GDP。,因此是重复部分。此类错误必须由研究人员自己处理。
好了,到此详细讲解就结束了,撒花!(0.0)
最后提示:stata 12、13 白色主界面默认不支持中文,中文显示为乱码。可以在主界面任意位置右击—>Preferences,然后将配色模式从Standard改为Classic Mode就可以正常显示中文了。
标准—>经典