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

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

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

    經(jīng)驗不在于年限,在于積累---專注互聯(lián)網(wǎng)軟件開發(fā)

    把工作當事業(yè)做,把項目當作品做!

      BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
      55 Posts :: 0 Stories :: 66 Comments :: 0 Trackbacks
     

    Web-Harvest是一個Java開源Web數(shù)據(jù)抽取工具。它能夠收集指定的Web頁面并從這些頁面中提取有用的數(shù)據(jù)。其實現(xiàn)原理是,根據(jù)預先定義的配置文件用httpclient獲取頁面的全部內(nèi)容(關于httpclient的內(nèi)容,本博有些文章已介紹),然后運用XPath、XQuery、正則表達式等這些技術(shù)來實現(xiàn)對text/xml的內(nèi)容篩選操作,選取精確的數(shù)據(jù)。前兩年比較火的垂直搜索(比如:酷訊等)也是采用類似的原理實現(xiàn)的。Web-Harvest應用,關鍵就是理解和定義配置文件,其他的就是考慮怎么處理數(shù)據(jù)的Java代碼。當然在爬蟲開始前,也可以把Java變量填充到配置文件中,實現(xiàn)動態(tài)的配置。

    (友情提示:本博文章歡迎轉(zhuǎn)載,但請注明出處:陳新漢,http://m.tkk7.com/hankchen

    現(xiàn)在以爬取天涯論壇的所有版面信息為例,介紹Web-Harvest的用法,特別是其配置文件。

    天涯的版塊地圖頁面時:http://www.tianya.cn/bbs/index.shtml

    image

    [天涯的部分版面列表]

    我們的目標就是要抓取全部的版塊信息,包括版塊之間的父子關系。

    先查看版塊地圖的頁面源代碼,尋求規(guī)律:

    <div class="backrgoundcolor">

    <div class="bankuai_list">

           <h3>社會民生</h3>

           <ul>

                  <li><a id="item天涯雜談">天涯雜談</a></li>

                  <li><a id="item國際觀察">國際觀察</a></li>

                  <li><a id="item天涯時空">天涯時空</a></li>

                  <li><a id="item傳媒江湖">傳媒江湖</a></li>

                  …… //省略

    </ul>

    </div>

    <div class="clear"></div>

    </div>

    <div class="nobackrgoundcolor">

    <div class="bankuai_list">

           <h3>文學讀書</h3>

                  <ul>

                         <li><a id="item蓮蓬鬼話">蓮蓬鬼話</a></li>

                         <li><a id="item煮酒論史">煮酒論史</a></li>

                         <li><a id="item舞文弄墨">舞文弄墨</a></li>

                         ……. //省略

                  </ul>

    </div>

    <div class="clear"></div>

    </div>

    ……. //省略

    通過頁面源碼分析,發(fā)現(xiàn)每個大板塊都是在<div class="bankuai_list"></div>的包括之下,而大板塊下面的小版塊都是下面的形式包含的。

    <li><a href="xxx" id="xxx">xxx</a></li>,這些規(guī)律就是webharvest爬數(shù)據(jù)的規(guī)則。

    下面先給出全部的配置:(tianya.xml)

    <config charset="utf-8">

             <var-def name="start">

                <html-to-xml>

                       <http url="http://www.tianya.cn/bbs/index.shtml" charset="utf-8" />

                </html-to-xml>

             </var-def>

             <var-def name="ulList">

                <xpath expression="http://div[@class='bankuai_list']">

                       <var name="start" />

                </xpath>

             </var-def>

            <file action="write" path="tianya/siteboards.xml" charset="utf-8">

                   <![CDATA[ <site> ]]>

                   <loop item="item" index="i">

                       <list><var name="ulList"/></list>

                       <body>

                           <xquery>

                               <xq-param name="item">

                                <var name="item"/>

                               </xq-param>

                               <xq-expression><![CDATA[

                                       declare variable $item as node() external;

                                       <board boardname="{normalize-space(data($item//h3/text()))}" boardurl="">

                                       {

                                             for $row in $item//li return

                                                 <board boardname="{normalize-space(data($row//a/text()))}" boardurl="{normalize-space(data($row/a/@href))}" />

                                      }

                                      </board>

                               ]]></xq-expression>

                           </xquery>

                       </body>

                   </loop>

                   <![CDATA[ </site> ]]>

            </file>

    </config>

    這個配置文件分為三個部分:

    1.      定義爬蟲入口:

    <var-def name="start">

       <html-to-xml>

            <http url="http://www.tianya.cn/bbs/index.shtml" charset="utf-8" />

          </html-to-xml>

       </var-def>

           爬蟲的入口URL是:http://www.tianya.cn/bbs/index.shtml

           同時,指定了爬蟲的爬數(shù)據(jù)的編碼,這個編碼應該根據(jù)具體的頁面編碼來定,例如上面的入口頁面的編碼就是utf-8。其實,有很多的中文頁面的編碼是gbk或者gb2312,那么這個地方的編碼就要相應設置,否則會出現(xiàn)數(shù)據(jù)亂碼。

    2.      定義數(shù)據(jù)的過濾規(guī)則:

    <var-def name="ulList">

        <xpath expression="http://div[@class='bankuai_list']">

            <var name="start" />

           </xpath>

    </var-def>

           上面配置就是根據(jù)XPath從爬得的數(shù)據(jù)中篩選合適的內(nèi)容。這里需要得到所有的<div class="bankuai_list"></div>信息。有關XPathXQuery的語法請網(wǎng)上查詢。

    3.      最后一步就是處理數(shù)據(jù)??梢詫懭?/span>XML文件,也可以使用SetContextVar的方式把收集的數(shù)據(jù)塞到一個集合變量中,供Java代碼調(diào)用(比如:數(shù)據(jù)直接入庫)。
    這里是直接寫入
    XML文件,然后解析XML即可。

    注意下面的for循環(huán),這是XQuery的語法,提供遍歷的功能。由于大版面小版塊是一個樹狀結(jié)構(gòu),需要這種遍歷。

    <board boardname="{normalize-space(data($item//h3/text()))}" boardurl="">

    {

           for $row in $item//li return

    <board boardname="{normalize-space(data($row//a/text()))}" boardurl="{normalize-space(data($row/a/@href))}" />

    }

    </board>

    相關的Java代碼如下:

    /**

    * Copyright(C):2009

     * @author陳新漢

     * Sep4,20093:24:58PM

     */

    String configFile="tianya.xml";

    ScraperConfiguration config = new ScraperConfiguration(configFile);

    String targetFolder="c:\\chenxinhan";

    Scraper scraper = new Scraper(config,targetFolder);

    //設置爬蟲代理

    scraper.getHttpClientManager().setHttpProxy("218.56.64.210","8080");

    scraper.setDebug(true);

    scraper.execute();

    上面代碼執(zhí)行完成后,收集的數(shù)據(jù)文件地址為:c:\chenxinhan\tianya\siteboards.xml

    友情提示:本博文章歡迎轉(zhuǎn)載,但請注明出處:陳新漢,http://m.tkk7.com/hankchen

    posted on 2009-09-22 11:58 hankchen 閱讀(10408) 評論(6)  編輯  收藏 所屬分類: Spider+Lucene+solr+nutch

    Feedback

    # re: Webharvest網(wǎng)絡爬蟲應用總結(jié) 2009-09-23 02:52 dff
    http://s.click.taobao.com/t_1?i=rWs3FkQtwkA%3D&p=mm_14068224_0_0&n=12  回復  更多評論
      

    # re: Webharvest網(wǎng)絡爬蟲應用總結(jié)[未登錄] 2009-09-25 10:25 小人物
    不錯 ,這篇文章對我很有幫助。  回復  更多評論
      

    # re: Webharvest網(wǎng)絡爬蟲應用總結(jié)[未登錄] 2009-10-26 16:19 sailor

    @小人物
    請問,能不能深入抓取多個頁面呀。
    如:分類下的文章的詳細信息
    用以下的形式表式
    <root>
    <category id=1>
    <new id=1>
    <title>111111</title>
    <author>111111</author>
    <body>111111</body>
    </new>
    <new id=2>
    <title>111111</title>
    <author>111111</author>
    <body>111111</body>
    </new>
    </category>
    <category id=2>
    <new id=3>
    <title>111111</title>
    <author>111111</author>
    <body>111111</body>
    </new>
    <new id=4>
    <title>111111</title>
    <author>111111</author>
    <body>111111</body>
    </new>
    </category>
    </root>
      回復  更多評論
      

    # re: Webharvest網(wǎng)絡爬蟲應用總結(jié) 2012-11-13 22:46 水水
    求工程源碼  回復  更多評論
      

    # re: Webharvest網(wǎng)絡爬蟲應用總結(jié) 2012-11-13 22:47 水水
    求工程源碼哦  回復  更多評論
      

    # re: Webharvest網(wǎng)絡爬蟲應用總結(jié) 2013-05-26 20:49 黃陳
    scraper.getHttpClientManager().setHttpProxy("218.56.64.210","8080");
    是什么意思?。?nbsp; 回復  更多評論
      


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導航:
     
    主站蜘蛛池模板: 亚洲免费在线视频播放| 全免费a级毛片免费看| 好大好硬好爽免费视频| 亚洲国产情侣一区二区三区| 精品女同一区二区三区免费站| 亚洲国产精品久久| 成人影片一区免费观看| 亚洲成a人片在线观看日本| A级毛片高清免费视频在线播放| 亚洲精品无码不卡在线播HE | 美女无遮挡拍拍拍免费视频| 免费在线观看你懂的| 日产久久强奸免费的看| 国产午夜亚洲精品理论片不卡 | 一级毛片免费不卡直观看| 精品亚洲一区二区三区在线播放| 一级做受视频免费是看美女| 久久亚洲国产精品123区| 最近中文字幕免费大全| 99久久亚洲精品无码毛片| 无码国产精品一区二区免费I6| 亚洲日本一线产区和二线| 国产公开免费人成视频| 国产高潮流白浆喷水免费A片 | 亚洲精品无码高潮喷水在线| 91九色精品国产免费| 午夜亚洲WWW湿好爽| 国产AV无码专区亚洲AWWW| 2021精品国产品免费观看| 亚洲性无码一区二区三区| 亚洲成a人无码av波多野按摩| 中文字幕在线免费看| 亚洲国产成人手机在线电影bd| 国产精品成人四虎免费视频| 久久久久久久久久免免费精品| 亚洲欧洲日产国码二区首页| 日本v片免费一区二区三区| 国产免费无码AV片在线观看不卡| 色噜噜亚洲男人的天堂| 爱情岛论坛网亚洲品质自拍| 99久久久国产精品免费蜜臀|