<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://www.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://www.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)站導航:
     
    主站蜘蛛池模板: 亚洲综合在线另类色区奇米| 亚洲精品视频免费看| 免费高清在线爱做视频| 亚洲精品熟女国产| 97在线视频免费播放| 亚洲精品在线观看视频| 日本视频在线观看永久免费 | 性xxxxx免费视频播放| 青青草原精品国产亚洲av| 毛片无码免费无码播放| 中文字幕在线观看亚洲| 久久福利资源网站免费看| 亚洲免费一级视频| 最近2019中文字幕免费看最新 | **一级毛片免费完整视| 91精品国产亚洲爽啪在线影院| 18成禁人视频免费网站| 亚洲中文字幕无码av在线| 国内精品免费视频自在线| 亚洲AV网一区二区三区 | 成人性生交大片免费看中文| 亚洲欧洲国产精品香蕉网| 午夜视频在线免费观看| 亚洲av永久无码精品三区在线4| 啦啦啦高清视频在线观看免费| 亚洲av永久中文无码精品综合| 亚洲日本va午夜中文字幕久久| 久久精品无码免费不卡| 久久久久亚洲AV无码专区首JN| 最近免费中文字幕大全| 成人a毛片视频免费看| 亚洲AV无码成人精品区在线观看 | 亚洲免费在线视频| 97se亚洲国产综合自在线| 亚洲AV无码乱码在线观看牲色| 今天免费中文字幕视频| 2017亚洲男人天堂一| 伊伊人成亚洲综合人网7777| 美女被免费喷白浆视频| 猫咪免费人成在线网站| 亚洲AV色香蕉一区二区|