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

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

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

    先講講做這個(gè)小程序的動(dòng)機(jī)吧,昨天看了下以前學(xué)院的新聞,沒什么更新,但發(fā)現(xiàn)列表很長,保留了2003年1月至今的所有新聞。

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

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

    如下圖所示:
    news.jpg


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

    小程序用腳本語言?應(yīng)該不錯(cuò)!

    Perl還是Python?。。。經(jīng)過一番網(wǎng)上查詢論證,似乎:Perl語法復(fù)雜,但簡練,API庫也超級多;Python語法清晰易懂,有點(diǎn)像Java,適合開發(fā)大型應(yīng)用。

    Java是我的最愛,也算熟悉了,就學(xué)點(diǎn)bt的吧,用Perl

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

    ?1 #
    ?2 #?Copyright?(C)?2007?羅明?<andyluo197(at)gmail.com>
    ?3 #
    ?4
    ?5 use ?strict? " vars " ;? # 嚴(yán)格遵循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 # ?從命令行參數(shù)中取主網(wǎng)頁地址和保存文件夾
    14 my ? $url ? = ? $ARGV [ 0 ];?
    15 my ? $location ? = ? $ARGV [ 1 ];
    16
    17 # ?子程序,解析主網(wǎng)頁中的鏈接地址
    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 # ?載入主網(wǎng)頁內(nèi)容,及解析鏈接地址
    30 my ? $ua ? = ?LWP :: UserAgent -> new;
    31 my ? $res ? = ? $ua -> request(HTTP :: Request -> new(GET? => ? $url ) , ? sub { $p -> parse( $_ [ 0 ])});
    32
    33 # ?將鏈接的相對路徑轉(zhuǎn)換為絕對路徑
    34 my ? $base ? = ? $res -> base;
    35 @urls ? = ? map ?{ $_ ? = ?url( $_ , ? $base )? -> ? abs }? @urls ;
    36
    37 # ?將網(wǎng)頁寫入文件
    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 }


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

    因?yàn)橛?a target="_blank">Google Desktop,即使文件名是1.html...,搜索起來也是很方便的。也可以擴(kuò)充下,將<a></a>中的新聞主題抽出來作為文件名。但這個(gè)程序?qū)ξ襾碚f已經(jīng)足夠了,所以就不繼續(xù)做了。

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

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



    版權(quán)所有 羅明
    posted on 2007-01-03 21:00 羅明 閱讀(2649) 評論(15)  編輯  收藏 所屬分類: ProgramTechOthersStudyNewsPerl
    Comments
     
    主站蜘蛛池模板: 亚洲一本综合久久| 免费毛片在线看片免费丝瓜视频| 97在线免费视频| 国产v亚洲v天堂a无| 免费人成在线观看播放国产| 毛片免费vip会员在线看| 久草视频在线免费看| 亚洲人成色77777在线观看| 免费无遮挡无码视频网站| 亚洲精品乱码久久久久久蜜桃图片 | 免费在线观看一级片| 亚洲免费在线观看视频| 中文毛片无遮挡高清免费| 亚洲av色香蕉一区二区三区蜜桃| 亚洲人成在线电影| 亚洲国产综合无码一区| 亚洲欧洲日产国码一级毛片| 国产免费人成在线视频| 免费**毛片在线播放直播| gogo全球高清大胆亚洲| 国产成人免费全部网站 | 亚洲最大在线观看| 亚洲国产成人精品无码区在线秒播 | 日本无吗免费一二区| 免费人成网站在线播放| 免费国产美女爽到喷出水来视频| 国外成人免费高清激情视频| 国产大片91精品免费观看男同| 免费在线观看毛片| 精品亚洲永久免费精品| 亚洲男女性高爱潮网站| 亚洲狠狠婷婷综合久久| 成全视频免费观看在线看| 国产免费看JIZZ视频| 国产免费爽爽视频免费可以看| 亚洲色欲久久久综合网| 亚洲日韩一区二区三区| 亚欧洲精品在线视频免费观看| 亚洲成年人免费网站| 亚洲精品国产V片在线观看 | 男女超爽刺激视频免费播放 |