- 在线时间
- 5024 小时
- 最后登录
- 2022-11-28
- 注册时间
- 2009-4-8
- 听众数
- 738
- 收听数
- 1
- 能力
- 23 分
- 体力
- 77391 点
- 威望
- 96 点
- 阅读权限
- 255
- 积分
- 27144
- 相册
- 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 ® 企业矿工™。
2 e& X ]3 {5 B简介:互联网已经成为一个有用的信息来源。通常是Web上的数据,我们要使用内的SAS,所以我们需要找到一种方式来获得这个数据。最好的办法是使用一个网络爬虫。 SAS提供几个从Web爬行和提取信息的方法。您可以使用基本的SAS数据步骤中的代码,或SAS文本矿工的%TMFILTER宏。虽然目前无法使用,SAS搜索管道将是一个功能强大的Web爬行产品,并提供更多的工具,网络爬行。每种方法都有其优点和缺点,所以取决于你想实现抓取的,它是最好对其进行审查。
. a0 S( e4 B& h8 v) J4 n B: W8 o4 e& i
( J9 {2 D: C$ X% ^. R2 Q5 B首先,重要的是要了解网络爬虫是如何工作的。你应该熟悉数据步骤的代码,宏,和SAS过程PROC SQL,然后再继续。
5 y" }+ Y5 \- `网络爬虫概述:一个网络爬虫是一个程序,一个或多个起始地址作为“种子URL”,下载网站这些URL相关的网页,在网页中包含的任何超链接提取,并递归地继续这些超链接标识下载Web页。从概念上讲,网络爬虫是很简单的。9 e$ I! t( Q1 {0 [5 i% u6 u& Q
一个Web 履带式有四项职责:
3 `0 `+ X6 r# d2 l- d! ^1。从候选人中选择一个网址。- \- B0 H8 d3 c& z' S. X3 o( W/ j
2。它下载相关的Web页。
) v3 [- O$ D% x8 J6 h3。它提取物在网页中的URL(超链接)。
% @# K2 p2 Y) \: }/ k$ |( L4。它补充说,未曾遇到的候选集的URL* s8 e N% ^" G+ ^. k5 U4 A% a2 L4 B
方法1:在WEB SAS数据步骤中的代码履带式
6 q+ M# u" k* Q7 }2 Y5 H* H首先创建一个网址的网站的Web crawler将开始列表。- X2 y! W' A; Q
data work.links_to_crawl;% x% T1 P& A/ B, d! w" U
length url $256 ;( [" H x" H" `* n9 ?0 T5 |
input url $;
+ F% c, @/ o/ `1 q+ W0 Hdatalines;
5 g1 x( y; p: c3 K# Whttp://www.yahoo.com
: R6 n! N3 G E2 {6 Phttp://www.madio.net1 k/ W" z' N# X* w! u
http://www.google.com0 b) ~+ a' [# |
;
; D" ?; A8 @6 k$ J3 ?run
8 L6 |1 F3 N+ X- N* V为了确保我们不抓取相同的URL一次以上,持有环节已创建一个数据抓取。; ^! ?$ r/ p$ o4 Q4 ?% a
当Web数据集将在开始时是空的,但一个网站的网址将被添加到数据集履带式完成抓取该网站。
0 n9 P/ T! p: \$ I4 P3 q; Z' edata work.links_crawled;
4 u, X5 s8 m2 R# h0 |: Clength url $256;
; f7 n: {* |, |! p3 a7 H r6 prun; P. A6 {, Q; v% B! E2 j
现在我们开始爬行!该代码需要我们的 work.links_to_crawl数据集的第一个URL。在第一观察“_N_式1”,网址是投入名为 next_url 宏变量,所有剩余的URL放回我们的种子URL数据集,使他们在未来的迭代。4 i& n- S6 j& u( a
/* pop the next url off */ F8 @+ o4 z1 O& d
%let next_url = ;
: U/ y% z7 G- A* {. kdata work.links_to_crawl;" i+ p3 U) P, M
set work.links_to_crawl;$ C6 j. Z1 c* u4 u: ?( B7 u
if _n_ eq 1 then call symput(“next_url”, url);& a3 F8 ^' j! r7 N, L. ], S9 [, C1 o
else output;; l4 L- p+ C8 g+ [4 U/ L
run;
* i+ i/ [& B! f2 s; N. E现在,从互联网上下载的网址。创建一个文件名称 _nexturl 。我们让SAS知道它是一个URL 而且可以发现,AT&next_url,这是我们的宏观变量,它包含的网址我们从拉 work.links_to_crawl数据集。
/ M* t7 K1 M% \) L/* crawl the url */" q! m4 [! m& F( O9 X
filename _nexturl url “&next_url”
( x* d1 A/ f4 W Y% B建立后的文件名的URL参考,确定一个地方把我们下载的文件。创建另一个文件名引用所谓 htmlfilm的条目,并在那里把从 url_file.html收集到的信息。4 r# ?3 v4 D4 X# E, l p4 Q$ g
/* put the file we crawled here */. G+ l" O$ ]+ b' P1 p" q: _2 R
filename htmlfile “url_file.html”
9 @* q2 Q, I T+ |3 }2 w& l接下来,我们通过数据的循环,把它写htmlfilm的条目文件名参考,并寻找更多的网址添加到我们的 work.links_to_crawl数据集。
9 Q0 `6 w9 U! \' l2 b+ Y& |( ^/* find more urls */
# ~5 e$ d2 N3 G8 s$ A+ z4 _data work._urls(keep=url);$ @8 m) L# ~6 J0 [) r" V( S% e
length url $256 ;
( P0 {% G& V7 b/ Z: s/ vfile htmlfile;
/ |, _1 r2 k7 b/ ainfile _nexturl length=len;# L/ d5 f. c& I
input text $varying2000. len;8 C; `4 g" M, H# T
put text;% Q4 {, T Y1 T5 c7 S/ W, X
start = 1;- ?" R# b: |; Y. v- r. k
stop = length(text);4 u \, s1 ?- O5 O* o, @" I
使用正则表达式一个网站的网址,以帮助搜索。正则表达式的匹配方法文本字符串,如字,词,或字符模式。 SAS已经提供了许多强大的字符串功能。然而,正则表达式通常会提供一个更简洁的方式,操纵和匹配的文本.( a' |' F8 S# M9 l9 g
if _n_ = 1 then do; j, v+ b6 p! H
retain patternID;3 o( j9 l/ ~, z
pattern = ‘/href=”([^"]+)”/i’;7 c/ B) s& ?9 P) {- I+ U' _
patternID = prxparse(pattern);: w1 M& ~6 [, q% x- r |
end+ x. n# J6 M' H m. l' W2 W0 e/ ~. p
首次观察到,创建一个patternID将保持整个数据步运行。寻找的模式是: “/href=”([^"]+)”/i’”.,这意味着我们正在寻找字符串“HREF =”“,然后再寻找任何字符串,是至少有一个字符长,不包含引号(“),并结束在引号(”)。在’我’ 目的的手段使用不区分大小写的方法,以配合我们的正则表达式。
( ]. i; Q* i W( k2 H a9 s6 V$ vAs a result, the Web crawler will find these types of strings:
! w0 D3 |' }/ l- t) ~7 a8 Ahref=”sgf/2010/papers.html” 5 ~) u0 S0 C: d0 B
href=”www.yahoo.com”
" M, Z9 |( h: G2 ~# }5 @HREF=”www.google.com”
5 ~" }. R$ [2 s2 HhReF=”http://www.madio.net”
, R0 K( Y( Y: |5 L% ?* F现在正则表达式匹配的一个网站上的文字。 PRXNEXT需要五个参数:正则表达式我们要寻找,寻找开始寻找正则表达式的开始位置,结束位置停止正则表达式,一旦发现字符串中的位置,而字符串的长度,如果发现的位置将是0,如果没有找到字符串。 PRXNEXT也改变了开始的参数,使搜索重新开始后的最后一场比赛是发现。
$ d$ G, e( l4 x) i. u5 S8 f7 k$ S. Scall prxnext(patternID, start, stop, text, position, length);
2 F8 u, f* g* {# ? U6 R$ ~代码中的循环,在网站上找到的所有环节显示的文本。2 R! d. p! w- O4 i8 ^/ O+ n$ r
do while (position ^= 0);
y7 p6 ?6 l7 X0 Qurl = substr(text, position+6, length-7);
: n2 w6 D$ Y, G" Xoutput;6 J# t3 d/ W8 ?! }+ k. B+ _
call prxnext(patternID, start, stop, text, position, length);" |4 s7 T9 Q) r% H! X& j& K
end;; |3 k/ C/ q2 P+ U0 E
run;
: u+ H1 y3 z! f* M: C/ p2 l, B如果代码发现一个网址,它会检索唯一的URL的一部分,启动后的第一个引号。例如,如果代码中发现的HREF =“http://www.new-site.com”,那么它应该保持 http://www.new-site.com 。使用 substr到删除前的6个字符和最后一个字符的URL的其余部分输出的work._urls 数据集。现在,我们插入的URL代码只是以跟踪抓取到一个数据集名为 work.links_crawled 我们已经和确保我们不再次浏览有。
0 k& w+ N5 @9 j7 K/* add the current link to the list of urls we have already crawled */
& G+ v4 f) O+ h5 [2 W7 a# _data work._old_link;) T3 W! r) z9 D/ F- \* @; Y3 M# {
url = “&next_url”;" P, E" x" p ?7 R; j& B
run;
+ H8 |. K2 h2 Z' d0 N6 I) wproc append base=work.links_crawled data=work._old_link force;" H5 T( C3 O& W: P
run;
- x& C f; n* I! t1 w8 W H下一步是在数据集 work._urls 的过程中发现的网址列表,以确保:: A3 S2 H- I) r5 o+ x8 c; [
1。我们尚未抓取他们,换句话说URL是不是在 work.links_crawled)。+ b& m" |6 S: m( t- v! T
2。我们没有排队抓取的URL(网址换句话说,是不是在work.links_to_crawl )。
3 V" _; }; _' }6 H2 f$ u1 a1 A/*7 Z/ j K# p) [
* only add urls that we have not already crawled
5 B4 M9 d! c2 W' N0 _* or that are not queued up to be crawled2 c; H) `5 r& `2 d K
*
8 H8 q. g z2 U4 I*/
! B% v; V/ a; H; p$ u4 j* lproc sql noprint;+ ?% E' a k6 T) B6 q. e+ \
create table work._append as
2 E ~, q2 q# O8 T$ Uselect url; L& T( d9 ]" u# I! m3 _4 w2 h
from work._urls
* q: p: M6 B4 xwhere url not in (select url from work.links_crawled)
; f$ B1 o1 z {$ v& G& ?. R; b- ?and url not in (select url from work.links_to_crawl);4 L- |3 R' D7 a9 ^, X& O- ?
quit;$ d4 e* M2 c3 g3 s
然后,我们添加网址还没有被抓取,而不是已经排队 work.links_to_crawl数据集。
% l! H L1 v0 A, ?5 Z2 h5 p4 Y/* add new links */5 k& H7 b& c7 Q; n7 W4 q
proc append base=work.links_to_crawl data=work._append force;
" }: T# T# W+ X6 U8 N/ z# j- |run;. V/ c$ m2 z9 f% w- }7 \& s
此时的代码循环回到开始劫掠 work.links_to_crawl数据集的下一个URL。+ [) u* Y& f5 i! P3 ^* w
|
zan
|