QQ登录

只需要一步,快速开始

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

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

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

1341

主题

738

听众

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 ® 企业矿工™。! 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
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信

    0

    主题

    4

    听众

    35

    积分

    升级  31.58%

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

    [LV.3]偶尔看看II

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

    群组: 数学建模培训课堂1

    回复

    使用道具 举报

    叶纯萱 实名认证       

    2

    主题

    3

    听众

    107

    积分

    升级  3.5%

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

    [LV.5]常住居民I

    群组: 数学专业考研加油站

    群组: Matlab讨论组

    群组: C 语言讨论组

    群组: Linux推广

    群组: EXCEL

    回复

    使用道具 举报

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

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2026-10-12 02:30 , Processed in 1.051082 second(s), 66 queries .

    回顶部