问题描述
我学习了如何使用jsoup java从Web抓取数据,在第一次尝试中,我成功地获得了输出,但是当我再次尝试运行时,它给出了一条错误消息。这是我的代码
package solution;
import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class WebScrapper {
public static void main(String[] args) throws IOException {
Document d=Jsoup.connect("https://www.wikihow.com/wikiHowTo?search=adjust+bass+on+computerr").timeout(6000).get();
Elements ele=d.select("div#searchresults_list");
for (Element element : ele.select("div.result")) {
String img_url=element.select("div.result_title").text();
System.out.println(img_url);
}
}
}
这是我收到的消息错误
Exception in thread "main" java.net.socketTimeoutException: Read timed out
at java.net.socketInputStream.socketRead0(Native Method)
at java.net.socketInputStream.socketRead(SocketInputStream.java:116)
at java.net.socketInputStream.read(SocketInputStream.java:171)
at java.net.socketInputStream.read(SocketInputStream.java:141)
at sun.security.ssl.SSLSocketInputRecord.read(SSLSocketInputRecord.java:466)
at sun.security.ssl.SSLSocketInputRecord.readHeader(SSLSocketInputRecord.java:460)
at sun.security.ssl.SSLSocketInputRecord.decode(SSLSocketInputRecord.java:159)
at sun.security.ssl.SSLTransport.decode(SSLTransport.java:110)
at sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1198)
at sun.security.ssl.SSLSocketImpl.readHandshakeRecord(SSLSocketImpl.java:1107)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:400)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:372)
at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:587)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:167)
at org.jsoup.helper.httpconnection$Response.execute(httpconnection.java:732)
at org.jsoup.helper.httpconnection$Response.execute(httpconnection.java:707)
at org.jsoup.helper.httpconnection.execute(httpconnection.java:297)
at org.jsoup.helper.httpconnection.get(httpconnection.java:286)
at solution.WebScrapper.main(WebScrapper.java:14)
Process finished with exit code 1
任何人都可以帮忙吗?
解决方法
可能您的互联网连接速度很慢。 检查您的Internet连接。
或在浏览器上尝试该URL。检查加载html所需的时间。
此外,添加一个try-catch块。
,一些观察结果:
-
堆栈跟踪显示超时发生在客户端仍在通过SSL设置时。在此过程中可能会出错。
-
timeout(6000)
将超时设置为6秒。这很短……如果网络路径拥塞,服务器距离很远,服务器负载很重,等等。 -
您说过,它从一开始就起作用,并且停止了工作。这可能是负载或拥塞问题。否则服务器可能已经看到来自您的客户端的重复呼叫要求相同的URL,并将其解释为DOS攻击或配置错误的应用程序……并在您的IP地址上加了一个阻止。