- 在线时间
- 5024 小时
- 最后登录
- 2022-11-28
- 注册时间
- 2009-4-8
- 听众数
- 738
- 收听数
- 1
- 能力
- 23 分
- 体力
- 77819 点
- 威望
- 96 点
- 阅读权限
- 255
- 积分
- 27272
- 相册
- 1
- 日志
- 14
- 记录
- 36
- 帖子
- 4293
- 主题
- 1341
- 精华
- 15
- 分享
- 16
- 好友
- 1975

数学中国总编辑
TA的每日心情 | 衰 2016-11-18 10:46 |
|---|
签到天数: 206 天 [LV.7]常住居民III 超级版主
 群组: 2011年第一期数学建模 群组: 第一期sas基础实训课堂 群组: 第二届数模基础实训 群组: 2012第二期MCM/ICM优秀 群组: MCM优秀论文解析专题 |
万维网过多的信息,股票报价,电影评论,市场价格趋势话题,几乎所有的东西,可以发现在点击一个按钮。在分析数据中发现,许多SAS用户感兴趣在网络上,但你得到这个数据的SAS环境呢?有很多方法,如 SAS数据步骤中的代码在设计你自己的网络爬虫或利用SAS%TMFILTER宏 ® 文本挖掘。在本文中,我们将审查一个网络爬虫的总体架构。我们将讨论获得网站的方法到SAS的信息,以及审查内部所谓的SAS搜索从实验项目的实验代码管道。我们也将提供咨询如何轻松定制一个网络爬虫,以适应个性化需求,以及如何具体的数据导入到SAS ® 企业矿工™。! Z7 L$ J: S9 l8 a5 S
简介:互联网已经成为一个有用的信息来源。通常是Web上的数据,我们要使用内的SAS,所以我们需要找到一种方式来获得这个数据。最好的办法是使用一个网络爬虫。 SAS提供几个从Web爬行和提取信息的方法。您可以使用基本的SAS数据步骤中的代码,或SAS文本矿工的%TMFILTER宏。虽然目前无法使用,SAS搜索管道将是一个功能强大的Web爬行产品,并提供更多的工具,网络爬行。每种方法都有其优点和缺点,所以取决于你想实现抓取的,它是最好对其进行审查。
, T3 A% \5 f- P8 I: ]7 D
. L" j& D0 [6 U# x首先,重要的是要了解网络爬虫是如何工作的。你应该熟悉数据步骤的代码,宏,和SAS过程PROC SQL,然后再继续。3 Z. q' [% z7 m* l+ _
网络爬虫概述:一个网络爬虫是一个程序,一个或多个起始地址作为“种子URL”,下载网站这些URL相关的网页,在网页中包含的任何超链接提取,并递归地继续这些超链接标识下载Web页。从概念上讲,网络爬虫是很简单的。
/ }$ D- m! m1 x1 V( X一个Web 履带式有四项职责:
) K, k! T8 ]7 T Q7 W! r. @: R1。从候选人中选择一个网址。- ^/ q3 I% E: s. \! D/ `- h1 c; q" x
2。它下载相关的Web页。
6 Z6 l$ Z" v6 @- t! N) w P3。它提取物在网页中的URL(超链接)。
: y( K1 X. l+ w. W7 a4。它补充说,未曾遇到的候选集的URL
. S9 T. j/ `; W2 a7 o1 v5 G方法1:在WEB SAS数据步骤中的代码履带式
Z# b6 O! D" [% d首先创建一个网址的网站的Web crawler将开始列表。5 g. p# E' q& F
data work.links_to_crawl;
' b8 j) p9 Y Q' D+ Q& ?7 b% Glength url $256 ;2 L, r0 x- O- y0 u. O" {# X
input url $;
# v6 V; u J- R- N8 y5 R- }/ `datalines;
8 P: Q! z. ~+ q* g! ahttp://www.yahoo.com# ]2 L. `( [5 ^+ E; E( g2 j. M& J
http://www.madio.net8 s* |6 G J* T+ I
http://www.google.com
- ~- h. v: W6 U4 A& Z$ v;. [! P/ U- N7 \' }( k* f" H+ i
run/ m2 J0 P' ~" N; t9 T) ~
为了确保我们不抓取相同的URL一次以上,持有环节已创建一个数据抓取。
# p/ T9 k; k; e; {当Web数据集将在开始时是空的,但一个网站的网址将被添加到数据集履带式完成抓取该网站。2 I0 g6 O9 B, s* j% v( M
data work.links_crawled;
' t5 b8 r+ K; k! f+ M V+ ]length url $256;0 q6 S$ ], B" [1 W T5 N
run;
" Q: v- w/ G2 G l6 T现在我们开始爬行!该代码需要我们的 work.links_to_crawl数据集的第一个URL。在第一观察“_N_式1”,网址是投入名为 next_url 宏变量,所有剩余的URL放回我们的种子URL数据集,使他们在未来的迭代。
/ c$ g" ]. }* I0 F8 f: Q! v/* pop the next url off */
3 Q. ~7 I: _0 h) U3 _. E* J: F%let next_url = ;9 e! i4 ~; ~1 J, i
data work.links_to_crawl;
b4 Q$ O0 V7 m3 v% u( xset work.links_to_crawl;
- S; u' l5 P8 q- d- mif _n_ eq 1 then call symput(“next_url”, url);) c# u" |" Y) ]. `/ \
else output;0 S, V z; u. E1 t+ U: G; M$ b; \! T+ m
run;7 w) m2 e# _1 J" Y8 Z9 G
现在,从互联网上下载的网址。创建一个文件名称 _nexturl 。我们让SAS知道它是一个URL 而且可以发现,AT&next_url,这是我们的宏观变量,它包含的网址我们从拉 work.links_to_crawl数据集。
: _% M% _( ]( U" E" ~' K, T& Q/* crawl the url */
) U3 ^ ]. [2 i( L6 M& ^filename _nexturl url “&next_url”
. `& a0 h) j) h$ ?! b& F建立后的文件名的URL参考,确定一个地方把我们下载的文件。创建另一个文件名引用所谓 htmlfilm的条目,并在那里把从 url_file.html收集到的信息。
: @& o, R# ~+ O, D5 t) V* A5 Q/* put the file we crawled here */
2 E5 q2 d+ j0 hfilename htmlfile “url_file.html”
2 V' ~% A' S; Y: X8 `7 ~接下来,我们通过数据的循环,把它写htmlfilm的条目文件名参考,并寻找更多的网址添加到我们的 work.links_to_crawl数据集。
. n, [+ r; {' ^& }% e% { Y2 `) P; V/* find more urls */ . r! q0 |( l8 s* v. @8 R# s8 x
data work._urls(keep=url);
" y3 F$ a- C2 r }- m7 y: X7 vlength url $256 ;& b% q5 z) ?0 K6 X6 A$ t
file htmlfile;; Y7 H' W% ~/ D/ J! T1 L- N
infile _nexturl length=len;+ e- |* B) M6 x
input text $varying2000. len;/ ]& E; ~# Y- ]7 I/ f1 @% S8 }
put text;
7 }& Y1 [8 t- k% ^9 V ^6 lstart = 1;
6 K6 `* W J! [3 a# b7 b8 g5 Kstop = length(text);" O" s; B) N3 C/ D2 Z8 k- s6 S
使用正则表达式一个网站的网址,以帮助搜索。正则表达式的匹配方法文本字符串,如字,词,或字符模式。 SAS已经提供了许多强大的字符串功能。然而,正则表达式通常会提供一个更简洁的方式,操纵和匹配的文本. F% G& y. b9 {8 ` S/ M
if _n_ = 1 then do;
3 v x. Y: r9 a; \9 L1 y! Lretain patternID;+ Z5 p. L" _# {/ ^" p& ~, y( o
pattern = ‘/href=”([^"]+)”/i’;0 T# d' ~5 |/ H8 a1 d* Y
patternID = prxparse(pattern);" I4 [, \6 ~( [/ z. n6 m
end; P. U6 h$ ]3 Q- O0 Z+ Q" k
首次观察到,创建一个patternID将保持整个数据步运行。寻找的模式是: “/href=”([^"]+)”/i’”.,这意味着我们正在寻找字符串“HREF =”“,然后再寻找任何字符串,是至少有一个字符长,不包含引号(“),并结束在引号(”)。在’我’ 目的的手段使用不区分大小写的方法,以配合我们的正则表达式。3 q+ @+ K: m' F. G
As a result, the Web crawler will find these types of strings:
# t2 K9 X n9 z: w1 z8 shref=”sgf/2010/papers.html”
9 w! \ K4 |7 {, J. b& phref=”www.yahoo.com”9 c W: L5 p& t% z& F% G
HREF=”www.google.com”
' V$ h8 N6 O8 X: r. |0 l9 s! r: f6 [1 ahReF=”http://www.madio.net”
) n* c# s- K d: f' }9 Q现在正则表达式匹配的一个网站上的文字。 PRXNEXT需要五个参数:正则表达式我们要寻找,寻找开始寻找正则表达式的开始位置,结束位置停止正则表达式,一旦发现字符串中的位置,而字符串的长度,如果发现的位置将是0,如果没有找到字符串。 PRXNEXT也改变了开始的参数,使搜索重新开始后的最后一场比赛是发现。1 c w6 g- I, Z
call prxnext(patternID, start, stop, text, position, length);: \+ p$ d$ H/ S3 r9 V. ?
代码中的循环,在网站上找到的所有环节显示的文本。
7 _+ a' Y! D% K/ Mdo while (position ^= 0);
9 S Q) y- M# hurl = substr(text, position+6, length-7);
. r9 R% P, N% l7 e' d: loutput;. ]8 O0 v! \% _( {5 l- @8 i/ Y
call prxnext(patternID, start, stop, text, position, length);' _3 P' o! s3 v
end;. ~9 Y4 H I7 s5 T: U
run;9 z8 A! r" p4 M4 o5 B" R- T: ]: ]
如果代码发现一个网址,它会检索唯一的URL的一部分,启动后的第一个引号。例如,如果代码中发现的HREF =“http://www.new-site.com”,那么它应该保持 http://www.new-site.com 。使用 substr到删除前的6个字符和最后一个字符的URL的其余部分输出的work._urls 数据集。现在,我们插入的URL代码只是以跟踪抓取到一个数据集名为 work.links_crawled 我们已经和确保我们不再次浏览有。% n1 c/ y6 E3 ?9 S. H& E
/* add the current link to the list of urls we have already crawled */ - L# o/ T, s+ v, z- W) B5 M
data work._old_link;
9 ~* |. P; {1 D! p! purl = “&next_url”;7 d0 j5 s, g; e+ v# | d
run;
5 y5 [! V1 f) ^" f0 Mproc append base=work.links_crawled data=work._old_link force;
6 N: h0 Z8 j" G- \, Q+ ?0 n7 vrun;
* {' J$ @3 Y! C' n- f4 L- U2 T$ o下一步是在数据集 work._urls 的过程中发现的网址列表,以确保:
. B- g9 P# }3 C# g0 a5 ?1。我们尚未抓取他们,换句话说URL是不是在 work.links_crawled)。
. C0 I: _+ s+ y" m- {$ k2。我们没有排队抓取的URL(网址换句话说,是不是在work.links_to_crawl )。
5 V( J; i1 J3 k+ J- d4 s( ^; f/*
, f; H" A: g& E) E, k' e* only add urls that we have not already crawled- T8 r0 I8 ?/ U! g
* or that are not queued up to be crawled" z: Z; h4 k; i+ G' t
*
2 u) T; T; W( P7 v3 p" M*/
3 y; ?% E/ N$ Z9 q* n1 \( Bproc sql noprint;7 T l, {( L$ Y# x" h9 u
create table work._append as
5 j" j# P% A3 c7 j6 N1 h" Kselect url
6 W# ?3 g+ [! Yfrom work._urls/ l$ V! @- r. e9 {4 y$ l
where url not in (select url from work.links_crawled)5 a4 z7 i. l# n+ g9 f
and url not in (select url from work.links_to_crawl);- w. j8 g9 z: b4 j( e" b' [5 M
quit;: ]9 l" ^7 a3 v, Q% t
然后,我们添加网址还没有被抓取,而不是已经排队 work.links_to_crawl数据集。6 Y# q8 I" a) j
/* add new links */
9 B: [. d% a! d% A3 j& D2 X* x7 E. Oproc append base=work.links_to_crawl data=work._append force;
9 l7 k6 U& x/ o. |. c X0 ~run;
/ |& ?/ T( h: v, x1 w7 `% ~此时的代码循环回到开始劫掠 work.links_to_crawl数据集的下一个URL。) _$ t$ C6 B5 ]) h: e
|
zan
|