一亩三分地论坛

 找回密码
 获取更多干货,去instant注册!

扫码关注一亩三分地公众号
查看: 3561|回复: 18
收起左侧

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

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

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

您需要 登录 才可以下载或查看,没有帐号?获取更多干货,去instant注册!

x
如果是一些比较简单的规则的网页抓取,可以用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;
        data _null_;
                length url $ 256;. 1point 3acres 璁哄潧
                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;. 1point3acres.com/bbs

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

       /*$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;. visit 1point3acres.com for more.
                retain s; /*每次data步,将字符累加到s中,用了retain,s不会重置成缺失值*/
                set mywork.web;
                s = cats(s, webtext);
-google 1point3acres
                /*用正则表达式来匹配标题和文献引用次数*/
                /*其他编程语言的话可以找到很多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);

                                /*把标题中的tag之类的奇怪字符去掉*/
. visit 1point3acres.com for more.                                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);. visit 1point3acres.com for more.
                                output;
                        end;-google 1point3acres
                end;               
                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;
        quit;

%end;

%mend webScholar;

%webScholar


. From 1point 3acres bbs

评分

3

查看全部评分

本帖被以下淘专辑推荐:

chenhaowei 发表于 2014-3-27 00:12:19 | 显示全部楼层
不顶顶对不起我的良心
回复 支持 反对

使用道具 举报

EroicaCMCS 发表于 2014-3-27 20:58:27 | 显示全部楼层
好奇地问下抓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
差不多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一下。。。
. from: 1point3acres.com/bbs
不知道一样不一样, 但是google的搜索页有特定的抓取方法 - =
回复 支持 反对

使用道具 举报

EroicaCMCS 发表于 2014-5-21 23:06:09 | 显示全部楼层
readman 发表于 2014-5-21 22:23
不知道一样不一样, 但是google的搜索页有特定的抓取方法 - =

专门反反爬虫的方法?
回复 支持 反对

使用道具 举报

readman 发表于 2014-5-21 23:08:18 | 显示全部楼层
EroicaCMCS 发表于 2014-5-21 23:06
.鏈枃鍘熷垱鑷1point3acres璁哄潧专门反反爬虫的方法?

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

使用道具 举报

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

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

使用道具 举报

EroicaCMCS 发表于 2014-5-21 23:13:54 | 显示全部楼层
readman 发表于 2014-5-21 23:08. 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
我不知道现在什么样, 他是个叫什么 冲浪模型的 反爬虫..1point3acres缃
有个算法, 比如第一次是1秒间隔, 然后是3秒, 然 ...

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

使用道具 举报

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

使用道具 举报

EroicaCMCS 发表于 2014-5-21 23:24:14 | 显示全部楼层
readman 发表于 2014-5-21 23:18
- = 网卡是mac地址, 在七层模型第二层, 估计记录的是ip地址把...
我见过一个分布式爬虫才高级...... visit 1point3acres.com for more.
是 ...

上条回复网卡了结果出来结果语序是乱的。。。

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

使用道具 举报

readman 发表于 2014-5-21 23:35:32 | 显示全部楼层
EroicaCMCS 发表于 2014-5-21 23:24
上条回复网卡了结果出来结果语序是乱的。。。. 鍥磋鎴戜滑@1point 3 acres

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

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

使用道具 举报

EroicaCMCS 发表于 2014-5-22 00:23:19 | 显示全部楼层
readman 发表于 2014-5-21 23:35.鏈枃鍘熷垱鑷1point3acres璁哄潧
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 抓網頁資訊 謝謝分享!!!
回复 支持 反对

使用道具 举报

本版积分规则

请点这里访问我们的新网站:一亩三分地Instant.

Instant搜索更强大,不扣积分,内容组织的更好更整洁!目前仍在beta版本,努力完善中!反馈请点这里

关闭

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

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

custom counter

GMT+8, 2016-12-9 12:13

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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