[职场感言] 工作一年了,聊聊三件事

一亩三分地论坛

 找回密码
 Sign Up 注册获取更多干货
E轮2.5亿美元融资
K12教育独角兽一起作业
北京-诚聘人工智能/教育/大数据岗
坐标湾区
Games Startup
招聘游戏开发工程师
游戏初创公司招聘工程师、UIUX Designer和游戏策划
码农求职神器Triplebyte:
不用海投
内推多家公司面试
把贵司招聘信息放这里
查看: 6573|回复: 19
收起左侧

用SAS抓取网页简易版

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

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

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

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;
. Waral 博客有更多文章,
/*pageno相当于google学术搜索下面的第几页,这里试着抓取前两页,当然可以加*/
/*q=python 后的python可以换成其他的关键词*/
%do pageno = 0 %to 20 %by 10;
        data _null_;
                length url $ 256;. Waral 博客有更多文章,
                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);. From 1point 3acres bbs
        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;. Waral 博客有更多文章,
                textlength = len;
        run;

        data mywork.extracted;
                length s $ 32767; /*sas能处理的最长字符变量*/
                length r $ 500;
                length cite $500;
                retain s; /*每次data步,将字符累加到s中,用了retain,s不会重置成缺失值*/. Waral 博客有更多文章,
                set mywork.web;
                s = cats(s, webtext);

                /*用正则表达式来匹配标题和文献引用次数*/
                /*其他编程语言的话可以找到很多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之类的奇怪字符去掉*/. Waral 博客有更多文章,
                                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);
.1point3acres网                                cite = substr(s, position, length);

                                /*把数字提取出来*/.留学论坛-一亩-三分地
                                cite = prxchange('s/(\D*)(\d*)(\D*)/$2/',1, cite);
                                s = substrn(s, position + length);
                                output;
                        end;
                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;. 1point 3acres 论坛
        quit;

%end;
. 1point3acres
%mend webScholar;

%webScholar
. 1point3acres
. from: 1point3acres

评分

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会不会好点。。。. visit 1point3acres for more.
回复 支持 反对

使用道具 举报

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一下。。。
. Waral 博客有更多文章,
不知道一样不一样, 但是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
专门反反爬虫的方法?

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

使用道具 举报

readman 发表于 2014-5-21 23:12:22 | 显示全部楼层
EroicaCMCS 发表于 2014-5-21 23:06. more info on 1point3acres
专门反反爬虫的方法?
. visit 1point3acres for more.
- = 记错了, 冲浪模型是page rank 的算法..我忘了那个监测bot算法叫什么了..
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

readman 发表于 2014-5-21 23:18:33 | 显示全部楼层
EroicaCMCS 发表于 2014-5-21 23:13
这么高级。。
换us地址就没法破了er-agent可能还不行,可能会记录网卡

- = 网卡是mac地址, 在七层模型第二层, 估计记录的是ip地址把.... visit 1point3acres for more.
我见过一个分布式爬虫才高级.....
是通过bt协议传播的. bt上不是有种子服务器么? 然后你们先下种子, 然后去得到对方节点的数据完整度,然后share数据.
那爬虫就是让你们过去下载种子数据的时候, 先访问一个页面, 然后你把结果传给另一个服务器. 就相当于一个去中心化的爬虫..完克记录ip什么的...
回复 支持 反对

使用道具 举报

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

上条回复网卡了结果出来结果语序是乱的。。。. 留学申请论坛-一亩三分地

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

使用道具 举报

readman 发表于 2014-5-21 23:35:32 | 显示全部楼层
EroicaCMCS 发表于 2014-5-21 23:24
上条回复网卡了结果出来结果语序是乱的。。。

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

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

使用道具 举报

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

你在学校是公网ip么,我在学校没有公网ip的,需要NAT。 . visit 1point3acres for more.
表示全校满地跑也是禁,相当无语。.本文原创自1point3acres论坛

代理试过goagent, 也试过自己在校内服务器(squid搭的),还是不行。。。
过一段时间(一两天)就又可以了。。. 一亩-三分-地,独家发布

回复 支持 反对

使用道具 举报

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

使用道具 举报

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

使用道具 举报

schroding 发表于 2018-1-2 13:29:30 | 显示全部楼层
哇最近正好需要抓网页,原来SAS也行
回复 支持 反对

使用道具 举报

本版积分规则

提醒:发帖可以选择内容隐藏,部分板块支持匿名发帖。请认真读完以下全部说明:

■隐藏内容方法: [hide=200]你想要隐藏的内容比如面经[/hide]
■意思是:用户积分低于200则看不到被隐藏的内容
■可以自行设置积分值,不建议太高(200以上太多人看不到),也不建议太低(那就没必要隐藏了)
■建议只隐藏关键内容,比如具体的面试题目、涉及隐私的信息,大部分内容没必要隐藏。
■微信/QQ/电子邮件等,为防止将来被骚扰甚至人肉,以论坛私信方式发给对方最安全。
■匿名发帖的板块和方法:http://www.1point3acres.com/bbs/thread-405991-1-1.html

关闭

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

手机版|小黑屋|一亩三分地论坛声明

custom counter

GMT+8, 2018-5-24 18:27

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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