Java Jsoup未下载整个页面

Java Jsoup未下载整个页面,java,html,http,web,jsoup,Java,Html,Http,Web,Jsoup,网页为: 我想使用Jsoup提取所有元素 我使用的代码是: Document doc = Jsoup.connect(url).get(); Elements es = doc.getElementsByClass("tr_normal"); System.out.println(es.size()); 但是大小(1350)比实际大小(1452)小。 我将此页面复制到我的计算机上,并删除了一些元素。然后我运行了相同的代码,它是正确的。看起来元素太多了,所以jsoup无法读取所有元素 发生了什么

网页为:

我想使用Jsoup提取所有
元素

我使用的代码是:

Document doc = Jsoup.connect(url).get();
Elements es = doc.getElementsByClass("tr_normal");
System.out.println(es.size());
但是大小(1350)比实际大小(1452)小。 我将此页面复制到我的计算机上,并删除了一些
元素。然后我运行了相同的代码,它是正确的。看起来元素太多了,所以jsoup无法读取所有元素

发生了什么事?谢谢

问题在于内部Jsoup Http连接处理。选择引擎没有问题。我并没有深入讨论,但处理http连接的专有方法总是存在问题。我建议将其替换为HttpClient-。如果无法将http客户端添加为依赖项,则可能需要在处理http连接时检查Jsoup源代码。
问题是Jsoup.Connection的默认maxBodySize。请参阅更新的答案*我仍然保留HttpClient代码作为示例。 程序的输出

  • 从文件加载=1452
  • 从http客户端加载=1452
  • 从jsoup connect加载=1350
  • 使用maxBodySize=1452从jsoup connect加载

    package test;
    
    import java.io.IOException;
    import java.io.InputStream;
    
    import org.apache.http.HttpResponse;
    import org.apache.http.client.ClientProtocolException;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.impl.client.HttpClientBuilder;
    import org.jsoup.Jsoup;
    import org.jsoup.nodes.Document;
    import org.jsoup.select.Elements;
    
    public class TestJsoup {
    
        /**
         * @param args
         * @throws IOException
         */
        public static void main(String[] args) throws IOException {
            Document doc = Jsoup.parse(loadContentFromClasspath(), "UTF8", "");
            Elements es = doc.getElementsByClass("tr_normal");
            System.out.println("load from file= " + es.size());
    
            doc = Jsoup.parse(loadContentByHttpClient(), "UTF8", "");
            es = doc.getElementsByClass("tr_normal");
            System.out.println("load from http client= " + es.size());
    
            String url = "http://www.hkex.com.hk/eng/market/sec_tradinfo"
                    + "/stockcode/eisdeqty_pf.htm";
            doc = Jsoup.connect(url).get();
            es = doc.getElementsByClass("tr_normal");
            System.out.println("load from jsoup connect= " + es.size());
    
            int maxBodySize = 2048000;//2MB (default is 1MB) 0 for unlimited size
            doc = Jsoup.connect(url).maxBodySize(maxBodySize).get();
            es = doc.getElementsByClass("tr_normal");
            System.out.println("load from jsoup connect using maxBodySize= " + es.size());
        }
    
        public static InputStream loadContentByHttpClient()
                throws ClientProtocolException, IOException {
            String url = "http://www.hkex.com.hk/eng/market/sec_tradinfo"
                    + "/stockcode/eisdeqty_pf.htm";
            HttpClient client = HttpClientBuilder.create().build();
            HttpGet request = new HttpGet(url);
            HttpResponse response = client.execute(request);
            return response.getEntity().getContent();
        }
    
        public static InputStream loadContentFromClasspath()
                throws ClientProtocolException, IOException {
            return TestJsoup.class.getClassLoader().getResourceAsStream(
                    "eisdeqty_pf.htm");
        }
    
    }
    

好的,我知道该怎么办。但我还是想知道,这是jsoup的错误吗?我想这就是问题所在。默认最大大小为1MB。您的大小是1MB++。您可以使用doc=Jsoup.connect(url).maxBodySize(1200000).get();请参阅更新的答案。我只是检查了Jsoup源代码并发现了设置。根据调查结果,我还发现了类似的问题-。如果我们能将这一点告知Jsoup的团队并将其添加到Jsoup文档中,可能会对其他人有所帮助。