美文网首页
HttpClient与HttpUrlConnection的使用问

HttpClient与HttpUrlConnection的使用问

作者: 仰泳的双鱼 | 来源:发表于2018-04-03 11:31 被阅读0次

    昨天分别用python和java对同一批网页进行内容抓取时发现的问题。以下是场景描述

    1. 页面较大,总共70kb.

    2. python 的requests库能较快(1s内)获得完整数据返回,30%几率在1-5s内完整返回。

    3. java的jsoup的get方法,httpClient和httpUrlConnection的对应get请求方法,首先返回一部分文本(约16K),然后卡住,约10s后完整打印page内容。

    4. 麻烦的问题来了,代码的执行顺序让我现在比较迷惑,先记录一下,以后找到原因再补充。代码简写如下

    
        public static void main( String[] args ) throws IOException
        {
            String uri = "http://tech.sina.com.cn/i/2018-03-19/doc-ifyskynn9416417.shtml";
            HttpClient client = HttpClients.createDefault();
            URL url = new URL(uri.trim());
            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
            urlConnection.setReadTimeout(6000);
            urlConnection.connect();
            BufferedReader input = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
            String line;
            StringBuilder pageContent = new StringBuilder();
            while ((line = input.readLine()) != null) {
                pageContent.append(line);
                pageContent.append("\n");
            }
        
            input.close();
            System.out.println(pageContent.toString());   
            System.out.println("end of the program");
        
            Document doc = Jsoup.parse(pageContent.toString(), "utf-8");
            Elements eles = doc.select(".atricle");
            for (Element element : eles) {
                String text = element.text();
                System.out.println(text);
            }
            System.out.println("end of cycle");
        }
    
    
    

    其中用到了jsoup1.11.2版本和httpclient4.5.5版本的包。
    现在问题是当执行到 "***a"处时,pageContent并没有完全获取到page的源文件,只是部分,导致下面doc.select处的eles始终size为0,因此无法保存页面body的article部分内容。然而更诡异的是,a、b、三处的System.out.println()居然是顺序执行的,但是实际运行时是先输出a的一部分,程序显示执行完毕,然后程序运行到b到c之前的代码段,执行完毕后,大约卡顿5-10s,程序完整输出a的内容,然后输出b最后是c。

    相关文章

      网友评论

          本文标题:HttpClient与HttpUrlConnection的使用问

          本文链接:https://www.haomeiwen.com/subject/dxsqhftx.html