QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3241|回复: 2
打印 上一主题 下一主题

网络爬虫—利用SAS抓取网页方法

[复制链接]
字体大小: 正常 放大

1341

主题

737

听众

2万

积分

数学中国总编辑

  • TA的每日心情

    2016-11-18 10:46
  • 签到天数: 206 天

    [LV.7]常住居民III

    超级版主

    社区QQ达人 邮箱绑定达人 元老勋章 发帖功臣 新人进步奖 原创写作奖 最具活力勋章 风雨历程奖

    群组2011年第一期数学建模

    群组第一期sas基础实训课堂

    群组第二届数模基础实训

    群组2012第二期MCM/ICM优秀

    群组MCM优秀论文解析专题

    跳转到指定楼层
    1#
    发表于 2012-2-27 15:19 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta |邮箱已经成功绑定
    万维网过多的信息,股票报价,电影评论,市场价格趋势话题,几乎所有的东西,可以发现在点击一个按钮。在分析数据中发现,许多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.net9 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
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    叶纯萱 实名认证       

    2

    主题

    3

    听众

    107

    积分

    升级  3.5%

  • TA的每日心情
    开心
    2012-5-6 09:13
  • 签到天数: 34 天

    [LV.5]常住居民I

    群组数学专业考研加油站

    群组Matlab讨论组

    群组C 语言讨论组

    群组Linux推广

    群组EXCEL

    回复

    使用道具 举报

    0

    主题

    4

    听众

    35

    积分

    升级  31.58%

  • TA的每日心情
    开心
    2015-7-2 14:33
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    自我介绍
    我是来自浙江工业大学的学生

    群组数学建模培训课堂1

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2024-5-29 02:43 , Processed in 0.577123 second(s), 65 queries .

    回顶部