【转载】用sas抓取网页数据简易版

链接:http://www.1point3acres.com/bbs/thread-91000-1-1.html

如果是一些比较简单的规则的网页抓取,可以用SAS,纯属娱乐,SAS入门的话推荐SAS BASE和ADVANCE认证的教材,这两个认证其实没啥用,但教材的内容对于一个专业的SAS Programmer足够了,sas data step, sql, macro,会这些日常处理应该都没问题了。
%macro webScholar;
/*memlib选项是将data放在内存里,而不是放在D盘,可以提高读取速度,最后别忘记把dataset存盘*/
libname mywork "D:\" memlib;

/*建立存取结果的空数据集,抓取google学术搜索出来的标题和应用次数*/
proc sql;
        create table mywork.results_web (titles char(500), citenumber char(500));
quit;

/*pageno相当于google学术搜索下面的第几页,这里试着抓取前两页,当然可以加*/
/*q=python 后的python可以换成其他的关键词*/
%do pageno = 0 %to 20 %by 10;. From 1point 3acres bbs
        data _null_;
                length url $ 256;
                url = ‘http://scholar.google.com/scholar?start=0&q=python&hl=en&as_sdt=0,5‘;
                url = prxchange("s/start=0/start=&pageno/", 1, url);
                call symput("url", url);
        run;

/*recfm=n是将input分成长度为256的小块,因为sas字符变量最长3万多,超过的话会被截断,有时网页代码的一行会很长*/
        filename web url "%superq(url)" recfm=n debug;

/*$varying 这个format/informat很有意思,具体可以参考help*/
        data mywork.web;
                length webtext $ 256;
                infile web length=len;
                input webtext $varying256.len;
                textlength = len;
        run;

data mywork.extracted;
                length s $ 32767; /*sas能处理的最长字符变量*/
                length r $ 500;
                length cite $500;
                retain s; /*每次data步,将字符累加到s中,用了retain,s不会重置成缺失值*/
                set mywork.web;
                s = cats(s, webtext);
. From 1point 3acres bbs
                /*用正则表达式来匹配标题和文献引用次数*/
                /*其他编程语言的话可以找到很多package来做,sas这一点不太方便*/
                position = .;
                do until (position = 0);
                        patternID = prxparse(‘/<h3(\w|\W)*?<\/h3>(\w|\W)*?>Cite(d by )??\d*<\/a>/i‘);
                        call prxsubstr(patternID, s, position, length);
                        if position ^= 0 then do;.
                                patternID = prxparse(‘/<h3(\w|\W)*?<\/h3>/i‘);
                                call prxsubstr(patternID, s, position, length);
                                r = substr(s, position, length);. 1point3acres.com/bbs

/*把标题中的tag之类的奇怪字符去掉*/

r = prxchange(‘s/(<[^>]*?>)|(\[[^\]]*?\])|(&[^;]*?;s?)//‘, -1, r);
                                s = substrn(s, position + length);
                               
                                patternID = prxparse(‘/>Cite(d by )??\d*<\/a>/i‘);
                                call prxsubstr(patternID, s, position, length);
                                cite = substr(s, position, length);

/*把数字提取出来*/
                                cite = prxchange(‘s/(\D*)(\d*)(\D*)/$2/‘,1, cite);
                                s = substrn(s, position + length);
                                output;
                        end;
                end;                . From 1point 3acres bbs
                if length(s) > 29000 then s = substrn(s, 257);
        run;

/*将结果存起来,最后的数据中会有两个变量,论文的标题和引用次数*/
       /*因为开头memlib选项,这个dataset并没有存到硬盘中*/
        proc sql;
                insert into mywork.results_web
                select r, cite from mywork.extracted;. from: 1point3acres.com/bbs
        quit;

%end;.

%mend webScholar;

%webScholar

时间: 2024-10-18 10:30:33

【转载】用sas抓取网页数据简易版的相关文章

【iOS】正则表达式抓取网页数据制作小词典

应用程序不一定要自己去提供数据,有现成的数据学会去用才好. 网络很大,各种搜索引擎每天到处爬.本文通过正则表达式抓取网站的数据来做一个小词典. 一.正则表达式的使用 1. 确定匹配方案,即pattern 2. 用pattern实例化NSRegularExpression 3. 用匹配方法开始匹配. 匹配一次:可以使用firstMatch方法 匹配多次:可以用matchs方法 正则表达式对照表:(在网上找到了一个很不错的表,正则表达式各个语言通用) http://www.jb51.net/shou

Asp.net 使用正则和网络编程抓取网页数据(有用)

Asp.net 使用正则和网络编程抓取网页数据(有用) /// <summary> /// 抓取网页对应内容 /// </summary> /// <param name="strUrl">採集地址</param> /// <param name="Begin">開始字符</param> /// <param name="End">结束字符</param&g

java抓取网页数据,登录之后抓取数据。

最近做了一个从网络上抓取数据的一个小程序.主要关于信贷方面,收集的一些黑名单网站,从该网站上抓取到自己系统中. 也找了一些资料,觉得没有一个很好的,全面的例子.因此在这里做个笔记提醒自己. 首先需要一个jsoup的jar包,我用的1.6.0..下载地址为:http://pan.baidu.com/s/1mgqOuHa 1,获取网页内容(核心代码,技术有限没封装). 2,登录之后抓取网页数据(如何在请求中携带cookie). 3,获取网站的ajax请求方法(返回json). 以上这三点我就用一个类

Asp.net 使用正则和网络编程抓取网页数据(实用)

Asp.net 使用正则和网络编程抓取网页数据(实用) /// <summary> /// 抓取网页相应内容 /// </summary> /// <param name="strUrl">采集地址</param> /// <param name="Begin">开始字符</param> /// <param name="End">结束字符</param&g

scrapy递归抓取网页数据

scrapy spider的parse方法可以返回两种值:BaseItem,或者Request.通过Request可以实现递归抓取. 如果要抓取的数据在当前页,可以直接解析返回item(代码中带**注释的行直接改为yield item): 如果要抓取的数据在当前页指向的页面,则返回Request并指定parse_item作为callback: 如果要抓取的数据当前页有一部分,指向的页面有一部分(比如博客或论坛,当前页有标题.摘要和url,详情页面有完整内容)这种情况需要用Request的meta

使用HtmlAgilityPack批量抓取网页数据

[转]使用HtmlAgilityPack批量抓取网页数据 相关软件点击下载 登录的处理.因为有些网页数据需要登陆后才能提取.这里要使用ieHTTPHeaders来提取登录时的提交信息. 抓取网页  HtmlAgilityPack.HtmlDocument htmlDoc;            if (!string.IsNullOrEmpty(登录URL))            {                htmlDoc = htmlWeb.Load(登录URL, 提交的用户验证信息,

【.NET】使用HtmlAgilityPack抓取网页数据

原文:[.NET]使用HtmlAgilityPack抓取网页数据 刚刚学习了XPath路径表达式,主要是对XML文档中的节点进行搜索,通过XPath表达式可以对XML文档中的节点位置进行快速定位和访问,html也是也是一种类似于xml的标记语言,但是语法没有那么严谨,在codeplex里有一个开源项目HtmlAgilityPack,提供了用XPath解析HTML文件,下面掩饰如何使用该类库的使用 首先说下XPath路径表达式 XPath路径表达式 用来选取XML文档中的节点或节点集的 1.术语:

抓取网页数据

项目说明:[抓取网页数据] 项目介绍:采集指定网页内容,通过模式匹配匹配到要采集的数据格式返回到数组中 项目步骤:1.创建匹配模式表2.请求网页连接3.过滤文本,并对数据去重处理4.显示结果 效果展示: 完整代码: import console; /* 项目说明:[抓取网页数据] 项目介绍: 采集指定网页内容,通过模式匹配匹配到要采集的数据格式返回到数组中 项目步骤: 1.创建匹配模式表 2.请求网页连接 3.过滤文本,并对数据去重处理 4.显示结果 */ //参考来源:http://bbs.a

web scraper 抓取网页数据的几个常见问题

如果你想抓取数据,又懒得写代码了,可以试试 web scraper 抓取数据. 相关文章: 最简单的数据抓取教程,人人都用得上 web scraper 进阶教程,人人都用得上 如果你在使用 web scraper 抓取数据,很有可能碰到如下问题中的一个或者多个,而这些问题可能直接将你计划打乱,甚至让你放弃 web scraper . 下面列出几种你可能会碰到的问题,并说明解决方案. 1.有时候我们想选择某个链接,但是鼠标点击就出触发页面跳转,如何处理? 在我们选择页面元素的时候,勾选 "Enab