首頁>Program>source

我正在尝試通過URLConnection获取整个網頁。

最有效的方法是什麼?

我已经在這樣做了

URL url = new URL("http://www.google.com/");
URLConnection connection;
connection = url.openConnection();
InputStream in = connection.getInputStream();        
BufferedReader bf = new BufferedReader(new InputStreamReader(in));
StringBuffer html = new StringBuffer();
String line = bf.readLine();
while(line!=null){
    html.append(line);
    line = bf.readLine();
}
bf.close();

html拥有整个HTML頁面。

最新回復
  • 4天前
    1 #

    您的方法看起来不錯,但是您可以通過避免為每行建立中間String物件来使它更有效。

    執行此操作的方法是直接讀入臨時char []緩衝區。

    這裏是執行此操作的代碼的略微修改版本(為清楚起见,减去了所有錯誤檢查,異常處理等):

           URL url = new URL("http://www.google.com/");
            URLConnection connection;
            connection = url.openConnection();
            InputStream in = connection.getInputStream();        
            BufferedReader bf = new BufferedReader(new InputStreamReader(in));
            StringBuffer html = new StringBuffer();
            char[] charBuffer = new char[4096];
            int count=0;
            do {
                count=bf.read(charBuffer, 0, 4096);
                if (count>=0) html.append(charBuffer,0,count);
            } while (count>0);
            bf.close();
    

    為了获得更高的效能,如果要频繁呼叫此代碼,您当然可以做一些額外的事情,例如預分配字元陣列和StringBuffer。

  • 4天前
    2 #

    我认為這是最好的方法.頁面的大小是固定的("就是它的大小"),因此您無法改善記憶體.也许您可以在拥有內容後就對其进行壓縮,但是在這種形式下它们並不是很有用.我可以想象,最终您將需要將HTML解析為DOM樹。

    您所做的任何使讀數平行化的工作都会使解決方案過於複雜。

    我建議使用預設大小為2048或4096的StringBuilder。

    為什麼您认為發佈的代碼不够用? 您听起来好像犯了過早的優化.

    隨身携帶物品,晚上睡覺。

  • 4天前
    3 #

    您要如何處理获取的HTML? 解析吗? 最好知道一點,體面的HTML解析器已经可以具有直接使用 URL的構造函式或方法引數。   或 InputStream   這樣您就不必担心像這樣的流式傳輸效能。

    假設您要做的所有事情都在上一个問题中进行了描述,例如,使用Jsoup,您可以像下面這樣轻松地获得所有這些新闻鏈接:

    Document document = Jsoup.connect("http://news.google.com.ar/nwshp?hl=es&tab=wn").get();
    Elements newsLinks = document.select("h2.title a:eq(0)");
    for (Element newsLink : newsLinks) {
        System.out.println(newsLink.attr("href"));
    }
    

    仅几秒钟後,將顯示以下內容:

     http://www.infobae.com/mundo/541259-100970-0-Pinera-confirmo-que-el-rescate-comenzara-las-20-y-durara-24-y-48-horas
     http://www.lagaceta.com.ar/nota/403112/Argentina/Boudou-disculpo-con-DAIA-pero-volvio-cuestionar-medios.html
     http://www.abc.es/agencias/noticia.asp?noticia=550415
     http://www.google.com/hostednews/epa/article/ALeqM5i6x9rhP150KfqGJvwh56O-thi4VA?docId=1383133
     http://www.abc.es/agencias/noticia.asp?noticia=550292
     http://www.univision.com/contentroot/wirefeeds/noticias/8307387.shtml
     http://noticias.terra.com.ar/internacionales/ecuador-apoya-reclamo-argentino-por-ejercicios-en-malvinas,3361af2a712ab210VgnVCM4000009bf154d0RCRD.html
     http://www.infocielo.com/IC/Home/index.php?ver_nota=22642
     http://www.larazon.com.ar/economia/Cristina-Fernandez-Censo-indispensable-pais_0_176100098.html
     http://www.infobae.com/finanzas/541254-101275-0-Energeticas-llevaron-la-Bolsa-portena-ganancias
     http://www.telam.com.ar/vernota.php?tipo=N&idPub=200661&id=381154&dis=1&sec=1
     http://www.ambito.com/noticia.asp?id=547722
     http://www.canal-ar.com.ar/noticias/noticiamuestra.asp?Id=9469
     http://www.pagina12.com.ar/diario/cdigital/31-154760-2010-10-12.html
     http://www.lanacion.com.ar/nota.asp?nota_id=1314014
     http://www.rpp.com.pe/2010-10-12-ganador-del-pulitzer-destaca-nobel-de-mvll-noticia_302221.html
     http://www.lanueva.com/hoy/nota/b44a7553a7/1/79481.html
     http://www.larazon.com.ar/show/sdf_0_176100096.html
     http://www.losandes.com.ar/notas/2010/10/12/batista-siento-comodo-dieron-respaldo-520595.asp
     http://deportes.terra.com.ar/futbol/los-rumores-empiezan-a-complicar-la-vida-de-river-y-vuelve-a-sonar-gallego,a24483b8702ab210VgnVCM20000099f154d0RCRD.html
     http://www.clarin.com/deportes/futbol/Exigieron-Roman-regreso-Huracan_0_352164993.html
     http://www.el-litoral.com.ar/leer_noticia.asp?idnoticia=146622
     http://www.nuevodiarioweb.com.ar/nota/181453/Locales/C%C3%A1ncer_mama:_200_casos_a%C3%B1o_Santiago.html
     http://www.ultimahora.com/notas/367322-Funcionarios-sanitarios-capacitaran-sobre-cancer-de-mama
     http://www.lanueva.com/hoy/nota/65092f2044/1/79477.html
     http://www.infobae.com/policiales/541220-101275-0-Se-suspendio-la-declaracion-del-marido-Fernanda-Lemos
     http://www.clarin.com/sociedad/educacion/titulo_0_352164863.html
    

    有人已经說過正則表達式绝對是解析HTML的錯誤工具吗? ;)

    另請參见: 威兹威兹

      Pros and cons of HTML parsers in Java

  • android:使用ImageAdapter動態/以程式設計方式向GridView填充ImageView
  • Haskell字元串列出