<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    先講講做這個小程序的動機吧,昨天看了下以前學院的新聞,沒什么更新,但發現列表很長,保留了2003年1月至今的所有新聞。

    這個新聞列表是大學期間我們了解學院信息的主要來源,都養成了每天先看新聞再看BBS的習慣。在大連實習期間更是如此,也算是產生感情了^__^,所以。。。決定把這700+新聞全部保存下來...

    需求:指定一個網址,將這個網頁和里面所有的子鏈接頁面都下載下來,保存到指定的文件夾中。

    如下圖所示:
    news.jpg


    需求有了,怎么完成呢?用迅雷下載全部鏈接?嗯,這是個好主意,(我確實也這么做了一次,連接數開得太多了,差點被封orz ),但咱們是搞軟件的@_@,這個小功能是不是寫個程序就能搞定,用Java?想到那一堆Stream的封裝(new BufferedReader(new BufferedOutputStream(new FileOutputStream(new File("blabla.html")))))...我就頭暈。

    小程序用腳本語言?應該不錯!

    Perl還是Python?。。。經過一番網上查詢論證,似乎:Perl語法復雜,但簡練,API庫也超級多;Python語法清晰易懂,有點像Java,適合開發大型應用。

    Java是我的最愛,也算熟悉了,就學點bt的吧,用Perl

    完成代碼期間主要參考了Perl文檔中URL,HTML::LinkExtor,HTTP::Request的用法,Perl中國的一篇文章《LWP與WEB的基本使用》,還占用了J2EE的上課時間來編寫程序。。。

    ?1 #
    ?2 #?Copyright?(C)?2007?羅明?<andyluo197(at)gmail.com>
    ?3 #
    ?4
    ?5 use ?strict? " vars " ;? # 嚴格遵循my?scope定義
    ?6
    ?7 use ?LWP :: Simple;
    ?8 use ?HTML :: LinkExtor;
    ?9 use ?HTTP :: Request :: Common;
    10 use ?LWP :: UserAgent;
    11 use ?URI :: URL;
    12
    13 # ?從命令行參數中取主網頁地址和保存文件夾
    14 my ? $url ? = ? $ARGV [ 0 ];?
    15 my ? $location ? = ? $ARGV [ 1 ];
    16
    17 # ?子程序,解析主網頁中的鏈接地址
    18 my ? @urls ? = ?();
    19 sub ?urlCallback
    20 {
    21 ???? my ( $tag , ? %attr )? = ? @_ ;
    22 ???? return ? if ? $tag ?ne? ' a ' ;
    23 ???? push ( @urls , ? values ? %attr );
    24 }
    25
    26 # ?用于解析鏈接的LinkExtractor
    27 my ? $p ? = ?HTML :: LinkExtor -> new( \& urlCallback);
    28
    29 # ?載入主網頁內容,及解析鏈接地址
    30 my ? $ua ? = ?LWP :: UserAgent -> new;
    31 my ? $res ? = ? $ua -> request(HTTP :: Request -> new(GET? => ? $url ) , ? sub { $p -> parse( $_ [ 0 ])});
    32
    33 # ?將鏈接的相對路徑轉換為絕對路徑
    34 my ? $base ? = ? $res -> base;
    35 @urls ? = ? map ?{ $_ ? = ?url( $_ , ? $base )? -> ? abs }? @urls ;
    36
    37 # ?將網頁寫入文件
    38 $ua -> request(GET( $url ) , ? $location ? . ? ' \\index.html ' );
    39 my ? $index ? = ? 1 ;
    40 foreach ( @urls )
    41 {
    42 ???? $ua -> request(GET( $_ ) , ? $location ? . ? ' \\ ' ? . ? $index ? . ? ' .html ' );
    43 ???? $index += 1 ;
    44 }


    主網頁保存為index.html,子網頁按1、2、3排序生成1.html、2.html等

    因為有Google Desktop,即使文件名是1.html...,搜索起來也是很方便的。也可以擴充下,將<a></a>中的新聞主題抽出來作為文件名。但這個程序對我來說已經足夠了,所以就不繼續做了。

    總的來說用Perl還是很簡單的,庫也很多,寫起來挺方便!但是要記得常翻翻Perl手冊,呵呵

    Technorati Tag :? Perl?LWP? Download? web? script



    版權所有 羅明
    posted on 2007-01-03 21:00 羅明 閱讀(2650) 評論(15)  編輯  收藏 所屬分類: ProgramTechOthersStudyNewsPerl
    Comments
     
    主站蜘蛛池模板: 亚洲精品视频在线| 亚洲?V乱码久久精品蜜桃 | 亚洲午夜成人精品电影在线观看| 亚洲 欧洲 视频 伦小说| 在线视频精品免费| 久久亚洲国产最新网站| 成人免费福利电影| 狠狠综合亚洲综合亚洲色| 四虎永久成人免费| 国产精品免费在线播放| 亚洲AV无码码潮喷在线观看 | 两性色午夜免费视频| 亚洲AV午夜成人影院老师机影院| 国内精品一级毛片免费看| 亚洲午夜视频在线观看| 成人片黄网站A毛片免费| 午夜在线亚洲男人午在线| 中文字幕亚洲激情| 最近免费中文字幕大全免费| 亚洲一区二区三区高清不卡| 日本免费电影一区| baoyu777永久免费视频| 亚洲精品午夜在线观看| 国产免费啪嗒啪嗒视频看看| j8又粗又长又硬又爽免费视频| 亚洲av永久无码精品国产精品| 精品国产sm捆绑最大网免费站| 亚洲精品精华液一区二区| 亚洲真人日本在线| 猫咪免费人成网站在线观看| 亚洲AV一区二区三区四区| 两个人看www免费视频| 亚洲日产韩国一二三四区| 日本zzzzwww大片免费| 久久精品国产亚洲AV天海翼| 亚洲午夜久久久久久久久电影网| 免费专区丝袜脚调教视频| 免费观看亚洲人成网站| 亚洲精品自拍视频| 亚洲av无码乱码在线观看野外| 8x成人永久免费视频|