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

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

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

    假設(shè)你需要獲取51job人才網(wǎng)上java人才的需求數(shù)量,首先你需要分析51job網(wǎng)站的搜索這一塊是怎么運(yùn)作的,通過解析網(wǎng)頁的源代碼,我們發(fā)現(xiàn)了以下一些信息:
    1. 搜索時(shí)頁面請(qǐng)求的URL是 http://search.51job.com/jobsearch/search_result.php
    2. 請(qǐng)求所用的方法為:POST
    3. 返回的頁面的編碼格式為:GBK
    4. 假設(shè)我們想獲取搜索java人才時(shí)結(jié)果頁面中顯示的需求數(shù)量,我們發(fā)現(xiàn)數(shù)量位于返回的HTML數(shù)據(jù)中這樣的一段代碼之中:<td>1-30 / 14794</td>,于是我們可以得到這樣的一個(gè)模式:".+1-\d+ / (\d+).+",第一個(gè)分組的內(nèi)容就是我們需要的最終數(shù)據(jù),有關(guān)java中的模式,請(qǐng)參考java文檔中Pattern類的介紹
    5. 另外做為POST請(qǐng)求,頁面向服務(wù)器發(fā)送的數(shù)據(jù)如下(這個(gè)很容易能過prototype這樣的js框架抓取到,參考我的其它博客介紹):lang=c& amp; amp;stype=1&postchannel=0000&fromType=1&line=&keywordtype=2&keyword=java&btnJobarea=%E9%80%89%E6%8B%A9%E5%9C%B0%E5%8C%BA&jobarea=0000&image=&btnFuntype=%E9%80%89%E6%8B%A9%2F%E4%BF%AE%E6%94%B9&funtype=0000&btnIndustrytype=%E9%80%89%E6%8B%A9%2F%E4%BF%AE%E6%94%B9&industrytype=00
    對(duì)于第5條中的數(shù)據(jù)哪些是服務(wù)器真正需要的我們不管,全部發(fā)送過去就是了。有了這些準(zhǔn)備,我們就可以真正開始通過java發(fā)送請(qǐng)求,并獲得最終數(shù)據(jù)了。

    我們定義Resource類,這個(gè)類封裝所有的與請(qǐng)求有關(guān)的信息,Resource包括以下屬性:

    /**
      * 需要獲取資源的目標(biāo)地址,不包含查詢串
      
    */

     
    private String target;
      
    /**
      * get請(qǐng)求時(shí)的查詢串,或post請(qǐng)求的請(qǐng)求數(shù)據(jù)
      
    */

     
    private String queryData = "";
     
     
    /**
      * 請(qǐng)求方式,get / post
      
    */

     
    private String method = "GET";
     
     
    /**
      * 返回的數(shù)據(jù)的編碼類型
      
    */

     
    private String charset = "GBK";
     
     
    /**
      * 抓取數(shù)據(jù)的模式,將根據(jù)模式的分組來返回?cái)?shù)據(jù)列表
      
    */

     
    private String pattern;

    創(chuàng)建Resource的一個(gè)對(duì)象,封裝請(qǐng)求數(shù)據(jù):
    Resource res = new Resource();
    res.set
    //在這里設(shè)置與請(qǐng)求有關(guān)的信息

    以下為抓取內(nèi)容的代碼:
    //假設(shè)以下代碼中res對(duì)象封裝了所有的請(qǐng)求信息。
    //URL指向目的地。 
    //res.getTarget返回目標(biāo)地址,且當(dāng)為get請(qǐng)求時(shí),這個(gè)地址包含了查詢串的信息 
    URL url = new URL(res.getTarget()); 
    HttpURLConnection con 
    = (HttpURLConnection) url.openConnection(); //建立到目的地的聯(lián)接
    con.setRequestMethod(res.getMethod()); //設(shè)置請(qǐng)求的方法
    //設(shè)置HTTP請(qǐng)求頭信息
    con.setRequestProperty("accept""*/*");  
    con.setRequestProperty(
    "connection""Keep-Alive");
    con.setRequestProperty(
    "user-agent",
            
    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");
    con.setDoInput(
    true);
    if (res.getMethod().equals("POST")) //如果為Post請(qǐng)求則發(fā)送請(qǐng)求數(shù)據(jù)
      con.setDoOutput(true);
      con.getOutputStream().write(res.getQueryData().getBytes());
      con.getOutputStream().flush();
    }
        
    //通過BufferedReader一行行的讀取數(shù)據(jù),如果你需要的是全部返回結(jié)果,可以修改一下這里
    BufferedReader br = new BufferedReader(new InputStreamReader(
    con.getInputStream(), res.getCharset()));
    Pattern pattern 
    = Pattern.compile(res.getPattern()); 
    String s 
    = null;
    while ((s = br.readLine()) != null{
       System.out.println(s);
       Matcher m 
    = pattern.matcher(s); //檢測(cè)當(dāng)前行是否與要求結(jié)果的模式相匹配
       boolean b = m.matches();
       
    if (! b) {
          
    continue;
       }

       
    int size = m.groupCount();
       List result 
    = new ArrayList(size);
       
    for(int i=0; i<size; i++){
         result.add(m.group(i
    +1)); //如果有多個(gè)分組,則取出所有分組,并把最終結(jié)果做為列表返回
       }
         
       
    return result;
    }

    如果不需要通過提交表單數(shù)據(jù)給服務(wù)器就能抓取到最終結(jié)果,顯然上面的操作就有點(diǎn)小題大作了,刪除上面的部分代碼就可以了。
    補(bǔ)充:上文僅做java學(xué)習(xí)用,項(xiàng)目中需要實(shí)現(xiàn)網(wǎng)頁抓取,可以去了解一下JSOUP(http://jsoup.org/)和HTTPComponent(http://hc.apache.org/)

    Feedback

    # re: 通過java抓取任何指定網(wǎng)頁的數(shù)據(jù)  回復(fù)  更多評(píng)論   

    2010-03-08 16:23 by 胡長坤
    謝謝薛老師的的幫助,靜態(tài)化頁面服務(wù)已參照本文實(shí)現(xiàn)。謝謝薛老師,嘿嘿。

    # re: 通過java抓取任何指定網(wǎng)頁的數(shù)據(jù)  回復(fù)  更多評(píng)論   

    2010-12-13 15:18 by easy518
    http://www.easy518.com

    # re: 通過java抓取任何指定網(wǎng)頁的數(shù)據(jù)  回復(fù)  更多評(píng)論   

    2011-10-08 16:34 by 方法
    法國風(fēng)格

    # re: 通過java抓取任何指定網(wǎng)頁的數(shù)據(jù)  回復(fù)  更多評(píng)論   

    2012-05-12 16:59 by 小崔
    想問下,我抓的網(wǎng)頁有驗(yàn)證碼,無論我輸入什么驗(yàn)證碼,都會(huì)提示驗(yàn)證碼失效,能給予幫助嗎,先謝謝了

    # re: 通過java抓取任何指定網(wǎng)頁的數(shù)據(jù)  回復(fù)  更多評(píng)論   

    2013-12-14 11:31 by zujixie
    這個(gè)功能很強(qiáng)大,用處很多。很好

    # re: 通過java抓取任何指定網(wǎng)頁的數(shù)據(jù)  回復(fù)  更多評(píng)論   

    2014-11-25 15:35 by zuidaima
    java抓取網(wǎng)頁相關(guān)demo源代碼下載:http://zuidaima.com/share/k%E6%8A%93%E5%8F%96%E7%BD%91%E9%A1%B5-p1-s1.htm

    posts - 9, comments - 24, trackbacks - 0, articles - 0

    Copyright © terryxue

    主站蜘蛛池模板: 一级做α爱过程免费视频| 亚洲国产婷婷香蕉久久久久久| 一级做a爰全过程免费视频毛片| 91亚洲国产成人久久精品网址| 国产亚洲精品福利在线无卡一| 免费看美女被靠到爽| 国产成人精品免费视频大全麻豆| 国产伦精品一区二区免费| 国产精品亚洲一区二区在线观看| 亚洲国产日产无码精品| 精品亚洲永久免费精品| 亚洲国产小视频精品久久久三级| 拔擦拔擦8x华人免费久久| 无码日韩人妻av一区免费| 57pao国产成视频免费播放| 美女视频黄a视频全免费网站色窝 美女被cao网站免费看在线看 | 亚洲成a人片在线观看老师| 成人a免费α片在线视频网站| 无码区日韩特区永久免费系列| 1000部夫妻午夜免费| 欧洲精品99毛片免费高清观看| 色窝窝免费一区二区三区 | 亚洲精品无码你懂的网站| 国产成人免费高清在线观看| 午夜神器成在线人成在线人免费 | 色天使亚洲综合在线观看| 亚洲一区在线观看视频| 亚洲女人18毛片水真多| 亚洲视频在线一区二区三区| 亚洲综合视频在线| 亚洲最大成人网色| 亚洲黄色网址在线观看| 亚洲精品影院久久久久久| 亚洲人成网站影音先锋播放| 色婷婷亚洲十月十月色天| 久久精品国产亚洲AV高清热| 亚洲精品美女久久久久| 亚洲人成高清在线播放| 久久亚洲国产最新网站| 亚洲老熟女五十路老熟女bbw | 免费在线观看a级毛片|