【发布时间】:2014-02-22 05:55:04
【问题描述】:
我通过从网站获取 HTML 代码然后用 Java 解析它来从网站上抓取数据。
我目前正在使用 java.net.URL 以及 java.net.URLConnection。这是我用来从某个网站获取 HTML 代码的代码(在 this website 上找到,稍作编辑以满足我的需要):
public static String getURL(String name) throws Exception{
//Set URL
String s = "";
URL url = new URL(name);
URLConnection spoof = url.openConnection();
//Spoof the connection so we look like a web browser
spoof.setRequestProperty( "User-Agent", "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0; H010818)" );
BufferedReader in = new BufferedReader(new InputStreamReader(spoof.getInputStream()));
String strLine = "";
//Loop through every line in the source
while ((strLine = in.readLine()) != null){
//Prints each line to the console
s = s + strLine + "\n";
}
return s;
}
当我运行它时,可以正确接收大约 100-200 个网页的 HTML 代码。然而,在我完成抓取 HTML 代码之前,我得到了一个“java.io.IOException:服务器返回 HTTP 响应代码:URL 的 503”异常。我已经充分研究了这个主题,而其他问题,如this 不包括我正在使用的包。
提前感谢您的帮助!
【问题讨论】:
-
503 通常是由 Web 服务器临时过载引起的。可能是您的进程淹没了它,或者可能有其他东西在访问 Web 服务器。如果您尝试在每个请求之间插入短暂睡眠会发生什么?
-
现在运行它。每次访问之间有 100 毫秒的休息,每次访问之间的长时间停顿似乎更少,但它们仍然存在。等到它完成。编辑 1:在 358 中的 339 访问时,它给出了相同的错误。添加延迟似乎没有帮助,所以我会延迟 1000 秒运行它。
-
好的。添加一个完整的 1 秒延迟仍然可以将其输出为大约 240 次访问。我会试试下面的答案。