- 在线时间
- 5024 小时
- 最后登录
- 2022-11-28
- 注册时间
- 2009-4-8
- 听众数
- 737
- 收听数
- 1
- 能力
- 23 分
- 体力
- 76245 点
- 威望
- 96 点
- 阅读权限
- 255
- 积分
- 26800
- 相册
- 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 ® 企业矿工™。# M6 ~/ j/ g7 C" t0 H& @
简介:互联网已经成为一个有用的信息来源。通常是Web上的数据,我们要使用内的SAS,所以我们需要找到一种方式来获得这个数据。最好的办法是使用一个网络爬虫。 SAS提供几个从Web爬行和提取信息的方法。您可以使用基本的SAS数据步骤中的代码,或SAS文本矿工的%TMFILTER宏。虽然目前无法使用,SAS搜索管道将是一个功能强大的Web爬行产品,并提供更多的工具,网络爬行。每种方法都有其优点和缺点,所以取决于你想实现抓取的,它是最好对其进行审查。
( c1 j, c3 P; [2 I8 z- d# E
4 z0 V. ~, P. |首先,重要的是要了解网络爬虫是如何工作的。你应该熟悉数据步骤的代码,宏,和SAS过程PROC SQL,然后再继续。! E6 n. b' [8 f- p
网络爬虫概述:一个网络爬虫是一个程序,一个或多个起始地址作为“种子URL”,下载网站这些URL相关的网页,在网页中包含的任何超链接提取,并递归地继续这些超链接标识下载Web页。从概念上讲,网络爬虫是很简单的。( D1 x5 H, ]; X N
一个Web 履带式有四项职责:9 q% a) t, G2 y- q7 n4 n/ g4 d- v
1。从候选人中选择一个网址。
( `: \2 T- ~" u, s* { C: S2。它下载相关的Web页。
" b) m$ b/ W* Z" t7 u$ `: i3。它提取物在网页中的URL(超链接)。
7 O+ e/ l6 y3 l0 `6 w# T0 Q9 ^4。它补充说,未曾遇到的候选集的URL
8 E' b+ L: Y2 ?方法1:在WEB SAS数据步骤中的代码履带式1 {1 t# m$ C( F! @
首先创建一个网址的网站的Web crawler将开始列表。$ s4 m$ s, }8 n' o- l8 w
data work.links_to_crawl;
( X5 q" F8 Q* {6 m q( Klength url $256 ;$ o" ~ }9 G8 E! h9 B% k
input url $;& ]! I! T" A% T% a ~: W% l
datalines;7 M1 C# a$ f! Z! l
http://www.yahoo.com, ]: O! y0 c; R5 h
http://www.madio.net
& _+ m1 l ~2 d b8 shttp://www.google.com
; R" j: o, b! s# \;
+ j( [: i7 b D$ q+ prun
. g- w0 I, z' k+ k" s为了确保我们不抓取相同的URL一次以上,持有环节已创建一个数据抓取。
5 D6 H$ \5 L1 E0 d7 y6 K当Web数据集将在开始时是空的,但一个网站的网址将被添加到数据集履带式完成抓取该网站。
+ k$ `, T2 g1 [9 sdata work.links_crawled; $ P( r2 A: W" e5 G1 a+ C' v
length url $256;
- L0 K2 [# g1 N8 u$ C \/ e1 brun;
! t0 |3 g2 s5 ~) [现在我们开始爬行!该代码需要我们的 work.links_to_crawl数据集的第一个URL。在第一观察“_N_式1”,网址是投入名为 next_url 宏变量,所有剩余的URL放回我们的种子URL数据集,使他们在未来的迭代。
9 P- s: D2 A, l+ Y/* pop the next url off */
- k3 T8 d" b) W$ l. @%let next_url = ;( l; x, F5 @( p1 a" v6 _
data work.links_to_crawl;9 a0 y9 R" T* d) ?
set work.links_to_crawl;6 p& A6 e- }) W# n0 @/ {- \
if _n_ eq 1 then call symput(“next_url”, url);
4 J! V+ ^& n+ D, }+ u7 O& Gelse output;
2 R" m P) T, ^! J6 f. X" r. qrun;+ _3 _. | P+ v" a; h$ O% g& q
现在,从互联网上下载的网址。创建一个文件名称 _nexturl 。我们让SAS知道它是一个URL 而且可以发现,AT&next_url,这是我们的宏观变量,它包含的网址我们从拉 work.links_to_crawl数据集。3 X% R& J V! C4 R( m, K |
/* crawl the url */
7 ?2 V' S' G+ V7 h' u5 [1 s8 Vfilename _nexturl url “&next_url”7 S& S# D! {! H4 u" g' ^) ^+ d0 H
建立后的文件名的URL参考,确定一个地方把我们下载的文件。创建另一个文件名引用所谓 htmlfilm的条目,并在那里把从 url_file.html收集到的信息。: Z7 c" n1 y/ t
/* put the file we crawled here */
7 p9 q- H. q2 G, kfilename htmlfile “url_file.html”6 c1 C6 X: W' s. o0 N% ~3 l
接下来,我们通过数据的循环,把它写htmlfilm的条目文件名参考,并寻找更多的网址添加到我们的 work.links_to_crawl数据集。6 @0 ^* u3 {5 Z8 U( }, I- V! c
/* find more urls */
: T; l8 m, E `- L! Odata work._urls(keep=url);
( w/ P7 v, V0 tlength url $256 ;
% C; O" E; P- ~% L8 Q1 Mfile htmlfile;3 L( u; g8 k& I9 [' x
infile _nexturl length=len;
4 `3 |- r" O; Kinput text $varying2000. len;, e `/ c# B0 x! a) {" O- K
put text;
3 P9 {+ \! C* h3 `3 U- |1 Dstart = 1;
* E" H5 K, ^- ^. A& x; H+ \0 Hstop = length(text);
+ ~2 L: }: ]6 A* _7 B; |* O使用正则表达式一个网站的网址,以帮助搜索。正则表达式的匹配方法文本字符串,如字,词,或字符模式。 SAS已经提供了许多强大的字符串功能。然而,正则表达式通常会提供一个更简洁的方式,操纵和匹配的文本.
: H! v2 ] R' k. bif _n_ = 1 then do;' Y2 h( ` X7 B( T* R2 R$ }# q+ q
retain patternID;
r* o. j( v( w, l3 k( t& j0 @& |* ?pattern = ‘/href=”([^"]+)”/i’;' {- D' |5 M5 s) T+ ]( M
patternID = prxparse(pattern);
: X0 x: i8 J% T- M$ a; R- q7 zend
& Z+ L( X# N7 y) ?0 V. G' a1 ?. h8 a首次观察到,创建一个patternID将保持整个数据步运行。寻找的模式是: “/href=”([^"]+)”/i’”.,这意味着我们正在寻找字符串“HREF =”“,然后再寻找任何字符串,是至少有一个字符长,不包含引号(“),并结束在引号(”)。在’我’ 目的的手段使用不区分大小写的方法,以配合我们的正则表达式。
4 z, U2 C3 l9 }5 f. T4 E: tAs a result, the Web crawler will find these types of strings:5 e% E8 e. W" A; E
href=”sgf/2010/papers.html” 9 x+ \# A; ]' g+ v
href=”www.yahoo.com”" z) f7 |( T; ]2 L- u
HREF=”www.google.com”' S( b. n0 l, N1 `' o+ R" `. E! H
hReF=”http://www.madio.net”9 f* F, B& w( B- i5 }9 V
现在正则表达式匹配的一个网站上的文字。 PRXNEXT需要五个参数:正则表达式我们要寻找,寻找开始寻找正则表达式的开始位置,结束位置停止正则表达式,一旦发现字符串中的位置,而字符串的长度,如果发现的位置将是0,如果没有找到字符串。 PRXNEXT也改变了开始的参数,使搜索重新开始后的最后一场比赛是发现。
4 n* [: e) ^( i$ Jcall prxnext(patternID, start, stop, text, position, length);. z9 q4 n2 N: o4 y4 P
代码中的循环,在网站上找到的所有环节显示的文本。
. l i: a) j2 t. a& }4 Ido while (position ^= 0);( R# y1 q7 k$ P2 R* `
url = substr(text, position+6, length-7);' J, H4 z, f8 A" S1 {# O) A
output;% k- w& T5 X7 @2 L' |
call prxnext(patternID, start, stop, text, position, length);
8 ?" w# z! f, }end;9 F L, Z' D1 a3 J9 B8 f8 Z. u
run;
e( S4 } K o1 m6 @/ V如果代码发现一个网址,它会检索唯一的URL的一部分,启动后的第一个引号。例如,如果代码中发现的HREF =“http://www.new-site.com”,那么它应该保持 http://www.new-site.com 。使用 substr到删除前的6个字符和最后一个字符的URL的其余部分输出的work._urls 数据集。现在,我们插入的URL代码只是以跟踪抓取到一个数据集名为 work.links_crawled 我们已经和确保我们不再次浏览有。0 d$ A: J0 R! x. B R! C
/* add the current link to the list of urls we have already crawled */
; K; z3 i+ `* a3 Vdata work._old_link;9 y) n; J4 _% Z1 ?( q# `
url = “&next_url”;
- R: k: G) G7 H: P, Qrun;
3 a+ P8 Y/ d7 [! h" I2 ^0 u" Bproc append base=work.links_crawled data=work._old_link force;9 R3 r; G, F% N! x' c
run;! y4 X$ ?( K9 J5 [* X1 G; m8 s
下一步是在数据集 work._urls 的过程中发现的网址列表,以确保:
1 u' v8 S; m( \4 B4 a6 B1。我们尚未抓取他们,换句话说URL是不是在 work.links_crawled)。. ]6 M) v4 N) r
2。我们没有排队抓取的URL(网址换句话说,是不是在work.links_to_crawl )。
3 |2 ?. r7 O3 r8 O- ?/*
! H @, p; Q. A, `' g# X% s* only add urls that we have not already crawled; x9 |# H- }8 G( U3 s
* or that are not queued up to be crawled
9 g- o. B, r. u1 ~+ ^ ]0 o7 J9 f) Z*. Z! _) _& g1 M5 Z, J
*/& ?! G4 m& ]$ Z. K* k; ?, n; \
proc sql noprint;
8 |2 [ x. g. C3 Z" N5 l3 Gcreate table work._append as8 K+ z' {/ j4 t' P. W
select url5 E4 Y0 C7 E# }
from work._urls% Q. d( {. e# \' g0 G
where url not in (select url from work.links_crawled). ?. \& d* F1 I8 _7 R- e
and url not in (select url from work.links_to_crawl);
3 X. F2 j. Z: ~4 _% Cquit;' F; z+ t# P/ L8 X2 ]
然后,我们添加网址还没有被抓取,而不是已经排队 work.links_to_crawl数据集。
9 v" H" f) B1 r/ x/* add new links */2 }' `" }; p. O# W0 @9 b
proc append base=work.links_to_crawl data=work._append force;, H. \+ j0 Q7 ?& f ]- V: m
run;
. k8 {- \( S& i( B( g/ i; W此时的代码循环回到开始劫掠 work.links_to_crawl数据集的下一个URL。3 {8 O( b6 T( p0 b
|
zan
|