2011-12-23 19 views
9

JavaからWebページのソースコードを取得したいだけです。私はこれまでのソリューションの多くを見つけましたが、私は、以下のすべてのリンクのために働く任意のコードを見つけることができませんでした:JavaからWebページのソースコードを取得する方法

私のための主な問題をいくつかのコードはWebページのソースコードを取得しますが、欠落しているコードです。たとえば、次のコードは最初のリンクでは機能しません。

InputStream is = fURL.openStream(); //fURL can be one of the links above 
BufferedReader buffer = null; 
buffer = new BufferedReader(new InputStreamReader(is, "iso-8859-9")); 

int byteRead; 
while ((byteRead = buffer.read()) != -1) { 
    builder.append((char) byteRead); 
} 
buffer.close(); 
System.out.println(builder.toString()); 
+1

URLを開くときに最初に配信されるソースのみを取得することに注意してください。追加のコンテンツがAJAX経由で読み込まれている可能性があり、最初のストリームを読み込んだだけでそのコンテンツは表示されません。 - 例として、Firefoxでhttp://demo.vaadin.com/samplerを開き、ページソースコードを開きます。そこに表示されているすべてのコンテンツのソースは表示されません。 – Thomas

+0

@cerq:* "ウェブページのソースコード" *の定義に応じて、あなたはそれを行うことができます。例えば、* .jsp *によって生成されたウェブページの "ソースコード"は、* .jsp *ファイルそのものであり、**生成されたHTMLではないと主張することができます。 "ソースコード"ではなく、HTMLです。多くの場合、「ソースコード」はサーバー上にあり、サーバーに侵入するだけではアクセスできません。 – TacticalCoder

+0

@トーマス私の問題は、あなたが話すことに関するものだと思います。だから、表示されたすべてのコンテンツソースを取得する方法はありますか? – brtb

答えて

22

追加要求プロパティで次のコードを試してみてください。

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.net.URL; 
import java.net.URLConnection; 

public class SocketConnection 
{ 
    public static String getURLSource(String url) throws IOException 
    { 
     URL urlObject = new URL(url); 
     URLConnection urlConnection = urlObject.openConnection(); 
     urlConnection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11"); 

     return toString(urlConnection.getInputStream()); 
    } 

    private static String toString(InputStream inputStream) throws IOException 
    { 
     try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"))) 
     { 
      String inputLine; 
      StringBuilder stringBuilder = new StringBuilder(); 
      while ((inputLine = bufferedReader.readLine()) != null) 
      { 
       stringBuilder.append(inputLine); 
      } 

      return stringBuilder.toString(); 
     } 
    } 
} 
+0

あなたのコードも私が書いたコードもリンクを動作させませんhttp://www.cumhuriyet.com.tr?hn=298710まずコードをテストしてください。 – brtb

+2

System.out.println(getUrlSource( "http://cumhuriyet.com.tr/?hn=298710"));それは大丈夫です –

1
URL yahoo = new URL("http://www.yahoo.com/"); 
BufferedReader in = new BufferedReader(
      new InputStreamReader(
      yahoo.openStream())); 

String inputLine; 

while ((inputLine = in.readLine()) != null) 
    System.out.println(inputLine); 

in.close(); 
+0

私はyahoo.comまたはgoogle.comのために働くコードをしたくないです。私のポストを2回確認してください。 – brtb

3

私はあなたが過去2年間でどこかに解決策を見つけたことを確信しているが、以下が機能するソリューションですあなたのリクエストしたサイト用

package javasandbox; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.net.HttpURLConnection; 
import java.net.MalformedURLException; 
import java.net.URL; 

/** 
* 
* @author Ryan.Oglesby 
*/ 
public class JavaSandbox { 

private static String sURL; 

/** 
* @param args the command line arguments 
*/ 
public static void main(String[] args) throws MalformedURLException, IOException { 
    sURL = "http://www.cumhuriyet.com.tr/?hn=298710"; 
    System.out.println(sURL); 
    URL url = new URL(sURL); 
    HttpURLConnection httpCon = (HttpURLConnection) url.openConnection(); 
    //set http request headers 
      httpCon.addRequestProperty("Host", "www.cumhuriyet.com.tr"); 
      httpCon.addRequestProperty("Connection", "keep-alive"); 
      httpCon.addRequestProperty("Cache-Control", "max-age=0"); 
      httpCon.addRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"); 
      httpCon.addRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36"); 
      httpCon.addRequestProperty("Accept-Encoding", "gzip,deflate,sdch"); 
      httpCon.addRequestProperty("Accept-Language", "en-US,en;q=0.8"); 
      //httpCon.addRequestProperty("Cookie", "JSESSIONID=EC0F373FCC023CD3B8B9C1E2E2F7606C; lang=tr; __utma=169322547.1217782332.1386173665.1386173665.1386173665.1; __utmb=169322547.1.10.1386173665; __utmc=169322547; __utmz=169322547.1386173665.1.1.utmcsr=stackoverflow.com|utmccn=(referral)|utmcmd=referral|utmcct=/questions/8616781/how-to-get-a-web-pages-source-code-from-java; __gads=ID=3ab4e50d8713e391:T=1386173664:S=ALNI_Mb8N_wW0xS_wRa68vhR0gTRl8MwFA; scrElm=body"); 
      HttpURLConnection.setFollowRedirects(false); 
      httpCon.setInstanceFollowRedirects(false); 
      httpCon.setDoOutput(true); 
      httpCon.setUseCaches(true); 

      httpCon.setRequestMethod("GET"); 

      BufferedReader in = new BufferedReader(new InputStreamReader(httpCon.getInputStream(), "UTF-8")); 
      String inputLine; 
      StringBuilder a = new StringBuilder(); 
      while ((inputLine = in.readLine()) != null) 
       a.append(inputLine); 
      in.close(); 

      System.out.println(a.toString()); 

      httpCon.disconnect(); 
} 
} 
+0

助けが遅すぎることは決してありません。しかし、私はあなたのコードを試して、それは多くのWebページで動作しません。 –

+1

私は、異なるページが異なるフォーマットでデータを返すため、このセグメントがすべてのWebページに対して機能しないことに同意します。また、達成したいことに応じてリダイレクトが必要な場合もあります。いくつかのケースでは、gzipレスポンスとして応答を受け取ることがあり、次のように処理できます。InputStream gzippedResponse = httpCon.getInputStream(); InputStream ungzippedResponse = new GZIPInputStream(gzippedResponse); InputStreamReader reader =新しいInputStreamReader(ungzippedResponse、 "UTF-8"); StringWriter writer = new StringWriter(); ' – Roglesby

関連する問題