QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 4134|回复: 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 ® 企业矿工™。+ c4 {0 a) x% ?
    简介:互联网已经成为一个有用的信息来源。通常是Web上的数据,我们要使用内的SAS,所以我们需要找到一种方式来获得这个数据。最好的办法是使用一个网络爬虫。 SAS提供几个从Web爬行和提取信息的方法。您可以使用基本的SAS数据步骤中的代码,或SAS文本矿工的%TMFILTER宏。虽然目前无法使用,SAS搜索管道将是一个功能强大的Web爬行产品,并提供更多的工具,网络爬行。每种方法都有其优点和缺点,所以取决于你想实现抓取的,它是最好对其进行审查。
    9 P, \/ u/ e" |5 w$ o* ^  q
    # y& ?3 e* _& u1 h, v首先,重要的是要了解网络爬虫是如何工作的。你应该熟悉数据步骤的代码,宏,和SAS过程PROC SQL,然后再继续。# D/ p" B  D% O
    网络爬虫概述:一个网络爬虫是一个程序,一个或多个起始地址作为“种子URL”,下载网站这些URL相关的网页,在网页中包含的任何超链接提取,并递归地继​​续这些超链接标识下载Web页。从概念上讲,网络爬虫是很简单的。
    ; u3 c* t* Y+ D* e一个Web 履带式有四项职责:
    % n  a- P8 o# t6 B* G1。从候选人中选择一个网址。, j  \! M4 }+ f2 e/ {; u
    2。它下载相关的Web页。
    4 \; ~* }: v( u1 N1 b# ]8 B3。它提取物在网页中的URL(超链接)。; @; L  y$ n( [
    4。它补充说,未曾遇到的候选集的URL
      z/ b( A( q" n4 ?& B, p. h4 T方法1:在WEB SAS数据步骤中的代码履带式
    1 }4 J5 ~* p1 P# b( I' n" g4 f首先创建一个网址的网站的Web crawler将开始列表。' S& e2 x5 a0 Y* l; I6 D( k% a
    data work.links_to_crawl;& D: S- {0 L1 g* a0 G3 f: I
    length url $256 ;  F' f4 j3 d4 {- P
    input url $;
    4 f2 \2 e1 B7 z% E( [- i% Y2 Z# y+ h0 ~* Tdatalines;  s. L2 k' X$ e# K$ m4 \
    http://www.yahoo.com
    + x0 d% \0 s- I7 ?http://www.madio.net- R+ @: h7 a: `. }! y& E+ `1 @0 I6 O8 r
    http://www.google.com" T, g) O& Z3 N! Q- U
    ;
    ' a7 P. g( y9 Z9 Z( ~; N- w$ Y/ F( frun+ j5 u- C' V' t9 }0 u$ d8 ?1 u
    为了确保我们不抓取相同的URL一次以上,持有环节已创建一个数据抓取。
    + i1 F& T( O" b/ q6 `) E. I当Web数据集将在开始时是空的,但一个网站的网址将被添加到数据集履带式完成抓取该网站。
    * m+ F8 P5 k" q1 ~data work.links_crawled;
    1 {4 I, R" O/ zlength url $256;2 n! z  z( t* g8 u# y% \3 T
    run;
    * l- R8 Q$ b! {/ ~9 T% x4 B现在我们开始爬行!该代码需要我们的 work.links_to_crawl数据集的第一个URL。在第一观察“_N_式1”,网址是投入名为 next_url 宏变量,所有剩余的URL放回我们的种子URL数据集,使他们在未来的迭代。% R4 _( Z: K; \) e+ I0 m
    /* pop the next url off */) T4 t% \: m8 |1 V# J4 x
    %let next_url = ;
    " l0 [. D& L  J. r5 u- I2 l# kdata work.links_to_crawl;  Q2 v" T1 c2 y- ~! N
    set work.links_to_crawl;
    8 B% M( z9 ^' k5 jif _n_ eq 1 then call symput(“next_url”, url);& l: D# Q# P8 f' S/ m4 a8 W
    else output;
    7 [. Q3 [7 F& y; d; y4 Wrun;/ W* v$ Y% |) ?! O* \
    现在,从互联网上下载的网址。创建一个文件名​​称 _nexturl 。我们让SAS知道它是一个URL 而且可以发现,AT&next_url,这是我们的宏观变量,它包含的网址我们从拉 work.links_to_crawl数据集。
    2 r$ A% K+ d- _' m- T+ G& H! z6 Q9 N8 z/* crawl the url */
    1 o5 |3 ~) j& W" ^4 [8 c! |: Qfilename _nexturl url “&next_url”
    ! M/ D# p* {8 f% n* }4 R建立后的文件名​​的URL参考,确定一个地方把我们下载的文件。创建另一个文件名​​引用所谓 htmlfilm的条目,并在那里把从 url_file.html收集到的信息。
    1 y9 U/ x% Q0 X) l& T% V+ p) j1 t/* put the file we crawled here */
    ' {- w  N& S5 Y0 }filename htmlfile “url_file.html”% V" _# H6 A. D
    接下来,我们通过数据的循环,把它写htmlfilm的条目文件名​​参考,并寻找更多的网址添加到我们的 work.links_to_crawl数据集。
    ! `: t* ^6 Q' |/* find more urls */
    * B' |, F+ g" ]" a0 K8 {3 M) ^data work._urls(keep=url);! B, @6 `' U  C2 u9 e' O
    length url $256 ;
    ) L: ^" I. g4 t' e% afile htmlfile;
    2 F4 ~6 T: M# g9 Linfile _nexturl length=len;
    5 c- f8 H8 u  \# Tinput text $varying2000. len;% u- R0 Y0 k: |# Z, Y) s! V
    put text;' b2 ?# f5 |$ W9 N  g! p  {5 N& D8 d
    start = 1;
    2 h/ @( Z2 i8 I& F# ]) p8 h' n" Kstop = length(text);$ E& U9 g( |5 t
    使用正则表达式一个网站的网址,以帮助搜索。正则表达式的匹配方法文本字符串,如字,词,或字符模式。 SAS已经提供了许多强大的字符串功能。然而,正则表达式通常会提供一个更简洁的方式,操纵和匹配的文本.
    0 t. j9 o  F2 cif _n_ = 1 then do;* q" R* q% E% ?% ?% N. f# Z6 n
    retain patternID;3 R7 l7 s7 w! [* b1 i2 P
    pattern = ‘/href=”([^"]+)”/i’;
    & R0 |' `! D$ [, p& G4 TpatternID = prxparse(pattern);$ C: p( X% x- ^- K( f* h
    end$ D- D- Z# G. \, J* q
    首次观察到,创建一个patternID将保持整个数据步运行。寻找的模式是: “/href=”([^"]+)”/i’”.,这意味着我们正在寻找字符串“HREF =”“,然后再寻找任何字符串,是至少有一个字符长,不包含引号(“),并结束在引号(”)。在’我’ 目的的手段使用不区分大小写的方法,以配合我们的正则表达式。. S* A' n0 L& X0 L4 E
    As a result, the Web crawler will find these types of strings:
    6 e7 a2 F" C: b+ u) l1 k) G; zhref=”sgf/2010/papers.html” & V% F1 u" M* [) I8 e/ N* [; X
    href=”www.yahoo.com* h6 b) z4 K  c
    HREF=”www.google.com0 `- g# N6 }8 u- g' M# M9 x$ c; Q
    hReF=”http://www.madio.net
    0 l% V( V; C" ]  y% g: M现在正则表达式匹配的一个网站上的文字。 PRXNEXT需要五个参数:正则表达式我们要寻找,寻找开始寻找正则表达式的开始位置,结束位置停止正则表达式,一旦发现字符串中的位置,而字符串的长度,如果发现的位置将是0,如果没有找到字符串。 PRXNEXT也改变了开始的参数,使搜索重新开始后的最后一场比赛是发现。8 @3 _* N! i* i& S& a, }3 h
    call prxnext(patternID, start, stop, text, position, length);
    $ a6 ^7 L2 S- y: m代码中的循环,在网站上找到的所有环节显示的文本。
    4 J5 S, `8 w& `- `) cdo while (position ^= 0);$ v- n6 M  v) p+ g* Y7 u
    url = substr(text, position+6, length-7);
    . i! [! H% x) i$ Ooutput;
    ' i7 C, X3 D6 f- \; B7 O& r( G6 Wcall prxnext(patternID, start, stop, text, position, length);
    ( g) Q* L/ g8 v8 G. vend;2 F* F3 Z7 a8 D7 e& G1 P3 A* B
    run;& E* ~0 W6 V6 h" B
    如果代码发现一个网址,它会检索唯一的URL的一部分,启动后的第一个引号。例如,如果代码中发现的HREF =“http://www.new-site.com”,那么它应该保持 http://www.new-site.com 。使用 substr到删除前的6个字符和最后一个字符的URL的其余部分输出的work._urls 数据集。现在,我们插入的URL代码只是以跟踪抓取到一个数据集名为 work.links_crawled 我们已经和确保我们不再次浏览有。
    3 H* ^1 ?$ M& ?. y3 ^9 I# |/* add the current link to the list of urls we have already crawled */ ( Z. Z( ~7 L6 x0 _4 R. }8 W
    data work._old_link;' @( A; r3 @% j  ]) s  M- H/ E
    url = “&next_url”;
    % [0 v2 c5 [1 o1 p; jrun;3 l9 r: g6 W0 r! G: e" C% R1 E  f
    proc append base=work.links_crawled data=work._old_link force;
    ! f3 L; Z+ ]! \& B/ _" brun;
    6 O9 ]% Y4 ~/ J, E5 v9 b下一步是在数据集 work._urls 的过程中发现的网址列表,以确保:
    % ^8 r% |2 E8 i' l  P1。我们尚未抓取他们,换句话说URL是不是在 work.links_crawled)。
    5 F! U7 ?$ y/ c+ O, V$ S( }2。我们没有排队抓取的URL(网址换句话说,是不是在work.links_to_crawl )。
    4 D* Q( W; }+ G% Y+ t3 [/*
    ' n3 r$ H# ^- q* only add urls that we have not already crawled* Q/ O0 T% z; i2 h7 l9 p
    * or that are not queued up to be crawled+ X7 F$ {0 d7 \* h5 i5 J7 _
    *2 \. G: g0 n$ }  w
    */" x9 A- h, s4 I! q; H# a0 J) d
    proc sql noprint;
    . B7 v0 |9 a1 ^' o9 P6 C+ K$ Zcreate table work._append as* j- W7 b2 y1 c- J) A, m
    select url; r0 i3 ?& N. P2 N  k, c- {5 T# N
    from work._urls% I5 O9 R5 }  j! E) i$ L
    where url not in (select url from work.links_crawled)3 O; N) v) {$ `7 F
    and url not in (select url from work.links_to_crawl);
    3 o7 o& G; E% E5 c- W7 ~: u6 Tquit;* b* b/ B' E. l6 i9 {. t/ k
    然后,我们添加网址还没有被抓取,而不是已经排队 work.links_to_crawl数据集。
    - V2 p3 p1 V- ]$ E; ]/* add new links */
    7 y5 l( g9 n. C: h  U, eproc append base=work.links_to_crawl data=work._append force;* c6 Q" ~; V  Q) c7 u& L7 c9 @
    run;
    - G, ~" F0 B7 S. B0 u此时的代码循环回到开始劫掠 work.links_to_crawl数据集的下一个URL。
    4 s0 d( e: z& o3 y- K- x
    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, 2026-8-24 06:01 , Processed in 0.373975 second(s), 66 queries .

    回顶部