SAS | 如何网络爬虫抓取网页数据

本人刚刚完成SAS正则表达式的学习,初学SAS网络爬虫,看到过一些前辈大牛们爬虫程序,感觉很有趣。现在结合实际例子,浅谈一下怎么做一些最基本的网页数据抓取。第一次发帖,不妥之处,还望各位大牛们指正。

本帖研究网页为'http://health.gmw.cn/2012-10/03/content_5266132.htm',意在提取该网页中全国各省降雨量信息,部分截图如下:

大致步骤就是用filename fileref url '网页地址'获取网页代码信息(包含有待提取数据),再用infile fileref将字符代码读入变量中,接着根据待提取数据的特点对写入的观测进行“数据清洗”,最后获得所需数据观测。

先针对该过程中可能出现的问题,做一下简单说明:

1.本人所用SAS软件为多国语言9.2版,刚开始运行含有filename fileref url '网页地址'及infile fileref时,很不友好的显示错误:无法连接主机。这一问题困惑我好久。最后看到有前辈发帖,从一个网站http://ftp.sas.com/techsup/download/hotfix/f9_sbcs_prod_list.html#034098下载相关hot fix(F9BA26)以后,得以解决。

2.若未在infile语句中加encoding='utf-8',得出的观测乱码。

3.正则表达式并不是必须的,但是用起来简洁明了,与一些字符函数配合使用,绝对可以达到你想要的提取目的。

4.大家进入网页后,点击右键,查看源代码(有些是源文件),这个源代码就是我们需要写入数据集的文件。先用

filename fileref url 'http://health.gmw.cn/2012-10/03/content_5266132.htm';

5.怎样将网页源文件代码写入数据集?用infile+input。不过根据写入方式不同,后续清洗数据的程序自然也不一样了。由于源代码中每一个input line的形式为<...>!!!<...>或者<...><...>(大家可以观察网页的源代码),而我们需要的数据就包含在!!!里面。而由于一个网页包含的信息太多,也有可能找到的!!!不包含所需数据。为了“清洗”数据方便,在这里我采用了一个比较笨的方法,通过观察源代码中待提取数据的大致范围,如第一个待提取字符串"黑龙江"出现在第184个input line,而最后一个"120”(澳门人均降水) 则出现在第623个input line,其他input line我们不需要,可以考虑在infile语句中加入firstobs=184 obs=623。

注意:由于网页可能发生小的变化,firstobs=与obs= 的值可能不准确,从而影响结果。建议查看源代码确定相应值。

这里介绍两种不同的写入方式。

a.以'>'为分隔符,写入后每个观测就形如<...或者!!!<...,而后者是我们所需保留的观测。根据!!!<...写出对应正则表达式进行清洗。考虑用正则表达式'/.+/'。

此种方式编程如下:

b.源代码文件中每一个input line整体作为一个值,这样就保留了原来形式<...>!!!<...>或者<...><...>,根据>!!!<写出对应表达式进行清洗。考虑用正则表达式'/>.{1,8}</'(数据位数最多为8)。

此种方式编程如下:

以上两种方式主要看各位的习惯吧。得到了筛选后的数据集work.newa(work.newb),数据集只含有1个变量text。而网页中则有6个变量。这是就需要对数据集work.newa做写什么了。

法1.set操作:

法2.分组transpose:

文 | 1989pengwei

来源 | 经管之家论坛

原文发布于微信公众号 - CDA数据分析师(cdacdacda)

原文发表时间:2016-04-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏高性能分布式系统设计

Pandas 简介

Pandas 是Python的数据处理包,全名:Python Data Analysis Library 是连接 SciPy 和 NumPy 的一种工具。特色...

35650
来自专栏我是攻城师

图形数据库之Neo4j学习(一)

43250
来自专栏GopherCoder

『Go 语言学习专栏』-- 第十一期

15530
来自专栏Albert陈凯

理解zookeeper选举机制

zookeeper集群 配置多个实例共同构成一个集群对外提供服务以达到水平扩展的目的,每个服务器上的数据是相同的,每一个服务器均可以对外提供读和写的服务,这点...

84150
来自专栏进击的程序猿

MapReduce浅读MapReduce概要

几个小时要处理完TB的数据,但是这些程序一般都不是分布式系统人员开发的,使用起来因为一些分布式的系统问题,会非常的痛苦

10230
来自专栏Aloys的开发之路

Python第三方常用工具、库、框架等

       Python ImagingLibrary(PIL):它提供强大的图形处理的能力,并提供广泛的图形文件格式支持,该库能进行图形格式的转换、打印和显...

502100
来自专栏AI

如何准备电影评论数据进行情感分析

准备工作从简单的步骤开始,比如加载数据,但是对于正在使用的数据非常特定的清理任务很快就会变得很困难。您需要从何处开始,以及通过从原始数据到准备建模的数据的步骤来...

41680
来自专栏我就是马云飞

RxJava2 实战知识梳理(2) - 计算一段时间内数据的平均值

前言 今天,我们继续跟着 RxJava-Android-Samples 的脚步,一起看一下RxJava2在实战当中的应用,在这个项目中,第二个的例子的描述如下:...

26260
来自专栏Java后端技术栈

你应该知道的缓存进化史!

本文是上周去技术沙龙听了一下爱奇艺的Java缓存之路有感写出来的。先简单介绍一下爱奇艺的java缓存道路的发展吧。

15110
来自专栏Golang语言社区

高并发服务器的设计--缓存的设计

为什么需要缓存呢? 很简单的道理,拿QQ做个比方,每天有几亿用户登录、查询个人信息,且这些信息基本不会变化,如果你是架构师,你会选择全部从数据库中查询么,估计会...

402100

扫码关注云+社区

领取腾讯云代金券