HttpClient与HttpUrlConnection的使用问题
昨天分别用python和java对同一批网页进行内容抓取时发现的问题。以下是场景描述
- 页面较大,总共70kb.
- python 的requests库能较快(1s内)获得完整数据返回,30%几率在1-5s内完整返回。
- java的jsoup的get方法,httpClient和httpUrlConnection的对应get请求方法,首先返回一部分文本(约16K),然后卡住,约10s后完整打印page内容。
- 麻烦的问题来了,代码的执行顺序让我现在比较迷惑,先记录一下,以后找到原因再补充。代码简写如下
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");
}
【HttpClient与HttpUrlConnection的使用问题】其中用到了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。
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- Docker应用:容器间通信与Mariadb数据库主从复制
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量
- 第326天
- Shell-Bash变量与运算符
- 逻辑回归的理解与python示例
- Guava|Guava RateLimiter与限流算法
- 我和你之前距离
- CGI,FastCGI,PHP-CGI与PHP-FPM
- 原生家庭之痛与超越