我希望在Google上执行搜索,并使用终端将结果作为单独的输出文件获取。在终端中,仅输入要搜索的关键字。这就是我做的。
import java.io.*;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Scanner;
public class GOOGLE {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("Enter search key");
String key = scan.nextLine();
String keyUpdated = key.replaceAll("\\s", "+");
System.out.println(keyUpdated);
try {
URL url = new URL("https://www.google.lk/search?q=" + keyUpdated);
BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
BufferedWriter writer = new BufferedWriter(new FileWriter(key + ".html"));
String line;
while ((line = reader.readLine()) != null) {
writer.write(line);
writer.newLine();
}
reader.close();
writer.close();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
这就是我输入“计算机科学”作为关键词时所得到的。
java.io.IOException: Server returned HTTP response code: 403 for URL: https://www.google.lk/search?q=computer+science
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1876)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1474)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254)
at java.net.URL.openStream(URL.java:1045)
at GOOGLE.main(Google.java:23)
答案 0 :(得分:1)
答案 1 :(得分:0)
正如在我的评论或@Eric Snider的回答中所解释的答案中所解释的那样,问题在于用于调用Google的用户代理。为了提供有效的用户代理,您可以向VM添加以下选项(或者如果您愿意,可以使用其他用户代理):
java -Dhttp.agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0" <program_name>
或者在运行时,使用以下方法:
System.setProperty("http.agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0");