May 2009 - May 2017 论坛八周年-你的足迹,我的骄傲


一亩三分地论坛

 找回密码
 获取更多干活,快来注册

一亩三分地官方iOS手机应用下载
查看: 4753|回复: 18
收起左侧

[DataScience] 用SAS抓取网页简易版

[复制链接] |试试Instant~ |关注本帖
venomtian 发表于 2014-3-26 22:39:22 | 显示全部楼层 |阅读模式

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看,没有帐号?获取更多干活,快来注册

x
如果是一些比较简单的规则的网页抓取,可以用SAS,纯属娱乐,SAS入门的话推荐SAS BASE和ADVANCE认证的教材,这两个认证其实没啥用,但教材的内容对于一个专业的SAS Programmer足够了,sas data step, sql, macro,会这些日常处理应该都没问题了。. from: 1point3acres.com/bbs
%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;-google 1point3acres

/*pageno相当于google学术搜索下面的第几页,这里试着抓取前两页,当然可以加*/. From 1point 3acres bbs
/*q=python 后的python可以换成其他的关键词*/
%do pageno = 0 %to 20 %by 10;
        data _null_;
                length url $ 256;
                url = 'http://scholar.google.com/scholar?start=0&q=python&hl=en&as_sdt=0,5';.鏈枃鍘熷垱鑷1point3acres璁哄潧
                url = prxchange("s/start=0/start=&pageno/", 1, url);. 1point 3acres 璁哄潧
                call symput("url", url);
        run;
. Waral 鍗氬鏈夋洿澶氭枃绔,
        /*recfm=n是将input分成长度为256的小块,因为sas字符变量最长3万多,超过的话会被截断,有时网页代码的一行会很长*/
        filename web url "%superq(url)" recfm=n debug;

       /*$varying 这个format/informat很有意思,具体可以参考help*/
        data mywork.web;. Waral 鍗氬鏈夋洿澶氭枃绔,
                length webtext $ 256;. Waral 鍗氬鏈夋洿澶氭枃绔,
                infile web length=len;
                input webtext $varying256.len;
                textlength = len;. 1point 3acres 璁哄潧
        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);

                /*用正则表达式来匹配标题和文献引用次数*/
                /*其他编程语言的话可以找到很多package来做,sas这一点不太方便*/
.1point3acres缃                position = .;. From 1point 3acres bbs
                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;
. from: 1point3acres.com/bbs                                 patternID = prxparse('/<h3(\w|\W)*?<\/h3>/i');
                                call prxsubstr(patternID, s, position, length);
                                r = substr(s, position, length);. from: 1point3acres.com/bbs
.鏈枃鍘熷垱鑷1point3acres璁哄潧
                                /*把标题中的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);-google 1point3acres
                                output;. visit 1point3acres.com for more.
                        end;
                end;               
                if length(s) > 29000 then s = substrn(s, 257);. From 1point 3acres bbs
        run;


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

%end;

%mend webScholar;

%webScholar


评分

3

查看全部评分

本帖被以下淘专辑推荐:

chenhaowei 发表于 2014-3-27 00:12:19 | 显示全部楼层
关注一亩三分地公众号:
Warald_一亩三分地
不顶顶对不起我的良心
回复 支持 反对

使用道具 举报

EroicaCMCS 发表于 2014-3-27 20:58:27 | 显示全部楼层
关注一亩三分地微博:
Warald
好奇地问下抓google scholar多少次给封的?哈哈
回复 支持 反对

使用道具 举报

 楼主| venomtian 发表于 2014-3-27 22:08:01 | 显示全部楼层

差不多100次的话就不给访问了,不知道sleep个几秒钟或者加上一些header会不会好点。。。
回复 支持 反对

使用道具 举报

EroicaCMCS 发表于 2014-3-27 22:47:51 | 显示全部楼层
venomtian 发表于 2014-3-27 22:08 . Waral 鍗氬鏈夋洿澶氭枃绔,
差不多100次的话就不给访问了,不知道sleep个几秒钟或者加上一些header会不会好点。。。

我也差不多是这个数,现在都有后遗症了,有时候(隔了很多天)google scholar还会时不时block一下。。。
回复 支持 反对

使用道具 举报

Adrienne 发表于 2014-5-21 16:15:53 | 显示全部楼层
牛掰,赞
回复 支持 反对

使用道具 举报

readman 发表于 2014-5-21 22:23:06 | 显示全部楼层
EroicaCMCS 发表于 2014-3-27 22:47
我也差不多是这个数,现在都有后遗症了,有时候(隔了很多天)google scholar还会时不时block一下。。。

不知道一样不一样, 但是google的搜索页有特定的抓取方法 - =
回复 支持 反对

使用道具 举报

EroicaCMCS 发表于 2014-5-21 23:06:09 | 显示全部楼层
readman 发表于 2014-5-21 22:23. more info on 1point3acres.com
不知道一样不一样, 但是google的搜索页有特定的抓取方法 - =
.1point3acres缃
专门反反爬虫的方法?
回复 支持 反对

使用道具 举报

readman 发表于 2014-5-21 23:08:18 | 显示全部楼层
EroicaCMCS 发表于 2014-5-21 23:06
专门反反爬虫的方法?

我不知道现在什么样, 他是个叫什么 冲浪模型的 反爬虫.
有个算法, 比如第一次是1秒间隔, 然后是3秒, 然后是5秒, 就可以一直扫下去..以前google一下就有, 有人专门研究这个....拿来用就可以.
然后记得扫几个换个user-agent..
回复 支持 反对

使用道具 举报

readman 发表于 2014-5-21 23:12:22 | 显示全部楼层
EroicaCMCS 发表于 2014-5-21 23:06
专门反反爬虫的方法?

- = 记错了, 冲浪模型是page rank 的算法..我忘了那个监测bot算法叫什么了..
回复 支持 反对

使用道具 举报

EroicaCMCS 发表于 2014-5-21 23:13:54 | 显示全部楼层
readman 发表于 2014-5-21 23:08
. from: 1point3acres.com/bbs 我不知道现在什么样, 他是个叫什么 冲浪模型的 反爬虫.
有个算法, 比如第一次是1秒间隔, 然后是3秒, 然 ...

这么高级。。
换us地址就没法破了er-agent可能还不行,可能会记录网卡
回复 支持 反对

使用道具 举报

readman 发表于 2014-5-21 23:18:33 | 显示全部楼层
EroicaCMCS 发表于 2014-5-21 23:13
这么高级。。
. 鍥磋鎴戜滑@1point 3 acres换us地址就没法破了er-agent可能还不行,可能会记录网卡
.鏈枃鍘熷垱鑷1point3acres璁哄潧
- = 网卡是mac地址, 在七层模型第二层, 估计记录的是ip地址把...
我见过一个分布式爬虫才高级......1point3acres缃
是通过bt协议传播的. bt上不是有种子服务器么? 然后你们先下种子, 然后去得到对方节点的数据完整度,然后share数据..1point3acres缃
那爬虫就是让你们过去下载种子数据的时候, 先访问一个页面, 然后你把结果传给另一个服务器. 就相当于一个去中心化的爬虫..完克记录ip什么的...
回复 支持 反对

使用道具 举报

EroicaCMCS 发表于 2014-5-21 23:24:14 | 显示全部楼层
readman 发表于 2014-5-21 23:18
- = 网卡是mac地址, 在七层模型第二层, 估计记录的是ip地址把...
我见过一个分布式爬虫才高级.....
是 ...
.1point3acres缃
上条回复网卡了结果出来结果语序是乱的。。。

我觉得是记录mac地址的。我试过换了很多ip包括用代理一样给禁。
回复 支持 反对

使用道具 举报

readman 发表于 2014-5-21 23:35:32 | 显示全部楼层
EroicaCMCS 发表于 2014-5-21 23:24
上条回复网卡了结果出来结果语序是乱的。。。. Waral 鍗氬鏈夋洿澶氭枃绔,

我觉得是记录mac地址的。我试过换了很多ip包括用代理一 ...

mac 地址在本地通过路由的时候, 会用ARP找到你的路由表中mac对应的ip, 然后就是ip之间传播了...
你代理怎么用的? 我以前不知道算法的时候, 用自己的macbook air 满学校跑换ip. 就可以了
回复 支持 反对

使用道具 举报

EroicaCMCS 发表于 2014-5-22 00:23:19 | 显示全部楼层
readman 发表于 2014-5-21 23:35. visit 1point3acres.com for more.
mac 地址在本地通过路由的时候, 会用ARP找到你的路由表中mac对应的ip, 然后就是ip之间传播了...
你代理 ...

你在学校是公网ip么,我在学校没有公网ip的,需要NAT。
表示全校满地跑也是禁,相当无语。

代理试过goagent, 也试过自己在校内服务器(squid搭的),还是不行。。。
过一段时间(一两天)就又可以了。。
鏉ユ簮涓浜.涓夊垎鍦拌鍧.
回复 支持 反对

使用道具 举报

geniuswu06 发表于 2014-7-27 08:03:11 | 显示全部楼层
高人啊 原来用SAS也是可以抓网页的信息的啊
回复 支持 反对

使用道具 举报

nikebo159 发表于 2015-5-15 10:51:21 | 显示全部楼层
這真的是太強了 完全不知道可以用 SAS 抓網頁資訊 謝謝分享!!!
回复 支持 反对

使用道具 举报

本版积分规则

关闭

一亩三分地推荐上一条 /5 下一条

手机版|小黑屋|一亩三分地论坛声明 ( 沪ICP备11015994号 )

custom counter

GMT+8, 2017-5-27 06:56

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

快速回复 返回顶部 返回列表