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");在我机器上运行抓取的内容是中文界面的源码,请问如何改写这段代码来抓取英文界面的源码?
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");在我机器上运行抓取的内容是中文界面的源码,请问如何改写这段代码来抓取英文界面的源码?
解决方案 »
- 如何避免使用Date过期了的构造函数?
- 如何用十六进制显示内容(请指教)!?
- 用Graphics时颜色出现问题
- 请教字符串转换的问题
- 连接Oracle错误: java.sql.SQLException: Io 异常: Connection refused(DESCRIPTION=(TMP=)(VSNNUM=153092352)(ERR=12505)(ERROR_STACK=
- java2各个版本间的javac一样吗?
- 如果一个对象正在运行,但该对象不是线程,有什么方法结束这个对象的运行
- 请keiy() 来接分,原贴http://community.csdn.net/Expert/topic/4322/4322260.xml?temp=.3735315
- 关于jdk与windows xp
- 错了,应该是我的java????
- 基于java的浏览器问题
- jvm 垃圾收集
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());
}
}
}
youtube是有中文化的界面的,也就是说如果你是中文操作系统或者是中文locale,youtube显示给你的就是中文界面,如果你是英文用户,那它显示给你的就是英文界面现在我只想抓取英文的界面,但是我上面那个程序抓下来的却是中文界面的源码。所以我想在程序里怎么改动一下,能够欺骗youtube的服务器,让它把英文界面的源码发给我我试了一楼的代码,即使加上accept-language: en 也不行,抓到的还是中文界面的源码
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();