public static String getPageSource(String urlStr){
String result = "";
try {
byte buffer[] = new byte[1024]; URL url = new URL(urlStr);
InputStream is = url.openStream(); boolean done = false;
while (!done) {
int i = is.read(buffer);
if (i != -1)
result = result + new String(buffer, 0, i);
else
done = true;
} is.close();
} catch (Exception e) {
e.printStackTrace();
}

return result;
}        getPageSource("http://www.youtube.com");在我机器上运行抓取的内容是中文界面的源码,请问如何改写这段代码来抓取英文界面的源码?

解决方案 »

  1.   


    import java.io.*;
    import java.net.*;public class FirstSocket {
    public static void main(String args[]) { // 判断参数是否为两个,正确的用法为 FirstSocket 网站 页面
    if (args.length != 2) {
    System.out
    .println("Usage : FirstSocket host page\r\nExample:FirstSocket www.google.com /");
    System.exit(0);
    }
    String strServer = args[0]; // 取得第一个参数
    String strPage = args[1]; // 取得第二个参数 try {
    String hostname = strServer;
    int port = 80;
    InetAddress addr = InetAddress.getByName(hostname);
    Socket socket = new Socket(addr, port); // 建立一个Socket // 发送命令
    BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(
    socket.getOutputStream(), "UTF8"));
    wr.write("GET " + strPage + " HTTP/1.0\r\n");
    wr.write("HOST:" + strServer + "\r\n");
    wr.write("\r\n");
    wr.flush(); // 接收返回的结果
    BufferedReader rd = new BufferedReader(new InputStreamReader(socket
    .getInputStream()));
    String line;
    while ((line = rd.readLine()) != null) {
    System.out.println(line);
    }
    wr.close();
    rd.close();
    } catch (Exception e) {
    System.out.println(e.toString());
    }
    }
    }
      

  2.   

    的确可以抓哈,而且我写的方法跟楼主差不多,只不过编码会遇到问题,只要抓的时候先用URLconnection.getcontent()方法获得 charset字符即可了 嘿嘿 互相学习啊 UP
      

  3.   

    哎呀,可能是我没说清楚——
    youtube是有中文化的界面的,也就是说如果你是中文操作系统或者是中文locale,youtube显示给你的就是中文界面,如果你是英文用户,那它显示给你的就是英文界面现在我只想抓取英文的界面,但是我上面那个程序抓下来的却是中文界面的源码。所以我想在程序里怎么改动一下,能够欺骗youtube的服务器,让它把英文界面的源码发给我我试了一楼的代码,即使加上accept-language: en 也不行,抓到的还是中文界面的源码
      

  4.   

    试试这个?
            URL url = new URL("http://www.google.com");
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestProperty("accept-language", "en");        connection.setReadTimeout(10000);
            connection.connect();
            BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            String out;
            while ((out = reader.readLine()) != null) {
                System.out.println(out);
            }
            reader.close();