jsoup超时,XML得到白色空间的错误,通过页面基本穿越耗时(jsoup times out, x

2019-11-01 08:29发布

我想做出解析HTML页面并选择有用的信息,并显示它的程序。 我做到了,打开由线搜索这个适当的内容流,然后线,但是这是一个耗时的过程。 于是我决定把它当作XML,然后使用XPath做到这一点。 这是我没有通过使我的系统上的XML文件,并从流读取内容,和我有空格错误,然后我决定直接打开文档

doc = (Document) builder.parse(inputStream);

但同样的错误仍然存​​在。 问这里后,我建议当我执行我的代码使用jSoup为HTML解析,现在:

Document doc= Jsoup.connect(url).get();

我得到读取超时。 当在Python和使用像使用字符串的查找方法,寻找一个天真的战略方面取得同样的程序,我展示的内容和太快。 如何使它在Java工作速度快?

完整的代码:

import java.io.*;
import org.jsoup.Jsoup;
import org.jsoup.helper.Validate;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class Parser {
public static void main(String[] args) {
    Validate.isTrue(true, "usage: supply url to fetch");
    try{
        String url="http://www.spoj.com/ranks/PRIME1/";
        Document doc= Jsoup.connect(url).get();
        Elements es=doc.getElementsByAttributeValue("class","lightrow");
        System.out.println(es.get(0).child(0).text());


    }catch(Exception e){e.printStackTrace();}
}

}

例外:

java.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(Unknown Source)
at java.net.SocketInputStream.read(Unknown Source)
at java.io.BufferedInputStream.fill(Unknown Source)
at java.io.BufferedInputStream.read1(Unknown Source)
at java.io.BufferedInputStream.read(Unknown Source)
at sun.net.www.http.HttpClient.parseHTTPHeader(Unknown Source)
at sun.net.www.http.HttpClient.parseHTTP(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at java.net.HttpURLConnection.getResponseCode(Unknown Source)
at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:412)
at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:393)
at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:159)
at org.jsoup.helper.HttpConnection.get(HttpConnection.java:148)
at Parser.main(Parser.java:12)

Answer 1:

请问您的防火墙或操作系统阻止你的要求(也许是块Java访问互联网)? 您正在使用PC或如。 Android的? 而且是你的HTML页面一个网站或一个(本地)的HTML文件? 请张贴更多的代码,或者你得到的异常。

请舒尔你不使用DOM文档,但org.jsoup.nodes.Document

我显示的内容

你怎么想显示的内容? 如果你只需要这样一个值:

...
<div>some value</div>
...

你可以用jsoup做到这一点:

Document doc = ... // parse html file or connect to website

final String value = doc.select("div").first().text();

System.out.println(value);

编辑:

由于默认连接超时为3秒(3000 millis)来应该改变大的网站,因为加载数据可能需要一些时间:

final String url = "http://www.spoj.com/ranks/PRIME1/";
final int timeout = 4000; // or higher

Document doc = Jsoup.connect(url).timeout(4000).get();


文章来源: jsoup times out, xml gets white space error, basic traversing through page is time consuming